Java 集合概述

Java 集合框架是 Java 提供的一组用于存储和操作数据的类和接口。集合框架可以方便地进行数据存储、查询、插入和删除等操作。它提供了一些接口和实现类,使得开发者能够灵活处理数据结构。

Java 集合框架的核心接口包括:Collection, Set, List, Queue, Map 等。每个接口有多个具体实现类,如 ArrayList, HashSet, LinkedList, HashMap 等。

1. Collection 接口

Collection 是 Java 集合框架的根接口,所有的集合类都直接或间接地实现了它。Collection 接口有两种常见的子接口:ListSet,分别用于有序集合和无序集合。

2. List 接口

List 是有序集合,允许重复元素。List 中的元素可以按照插入的顺序进行访问。

2.1 常见实现类:

  • ArrayList:基于动态数组实现,查询效率高,插入和删除效率低。
  • LinkedList:基于双向链表实现,插入和删除效率高,查询效率低。
  • Vector:与 ArrayList 类似,但它是线程安全的,性能相对较低。

2.2 示例:使用 ArrayList

import java.util.*;

public class ListExample {
    public static void main(String[] args) {
        // 创建一个 ArrayList
        List<String> list = new ArrayList<>();

        // 添加元素
        list.add("Apple");
        list.add("Banana");
        list.add("Cherry");

        // 遍历列表
        for (String item : list) {
            System.out.println(item);
        }

        // 根据索引获取元素
        System.out.println("Element at index 1: " + list.get(1));

        // 删除元素
        list.remove("Banana");
        System.out.println("After removal: " + list);

        // 获取元素的索引
        int index = list.indexOf("Cherry");
        System.out.println("Index of 'Cherry': " + index);
    }
}

在这个例子中,ArrayList 用于存储字符串,并演示了常见的操作,如添加、获取、删除和查找元素。

3. Set 接口

Set 是无序集合,不允许重复元素。常见的实现类有 HashSet, LinkedHashSet, TreeSet 等。

3.1 常见实现类:

  • HashSet:基于哈希表实现,元素无序,查找速度快,不允许重复元素。
  • LinkedHashSet:与 HashSet 类似,但保留元素的插入顺序。
  • TreeSet:基于红黑树实现,元素按自然顺序排序。

3.2 示例:使用 HashSet

import java.util.*;

public class SetExample {
    public static void main(String[] args) {
        // 创建一个 HashSet
        Set<String> set = new HashSet<>();

        // 添加元素
        set.add("Apple");
        set.add("Banana");
        set.add("Cherry");

        // 尝试添加重复元素
        set.add("Apple");

        // 遍历集合
        for (String item : set) {
            System.out.println(item);
        }

        // 判断元素是否存在
        boolean contains = set.contains("Banana");
        System.out.println("Contains 'Banana': " + contains);

        // 删除元素
        set.remove("Cherry");
        System.out.println("After removal: " + set);
    }
}

在这个示例中,HashSet 存储了多个水果名称,并演示了集合的添加、查找和删除操作。注意,重复元素 "Apple" 被自动忽略。

4. Map 接口

Map 是一个键值对集合,不同于 Collection 接口,Map 存储的是键值对(key-value)。Map 中的每个键都是唯一的,但值可以重复。

4.1 常见实现类:

  • HashMap:基于哈希表实现,键值对存储无序,查找速度快。
  • LinkedHashMap:与 HashMap 类似,但按照插入顺序保留键值对。
  • TreeMap:基于红黑树实现,键值对按键的自然顺序排序。

4.2 示例:使用 HashMap

import java.util.*;

public class MapExample {
    public static void main(String[] args) {
        // 创建一个 HashMap
        Map<String, Integer> map = new HashMap<>();

        // 添加键值对
        map.put("Apple", 1);
        map.put("Banana", 2);
        map.put("Cherry", 3);

        // 获取值
        System.out.println("Apple's value: " + map.get("Apple"));

        // 遍历 Map
        for (Map.Entry<String, Integer> entry : map.entrySet()) {
            System.out.println(entry.getKey() + ": " + entry.getValue());
        }

        // 删除键值对
        map.remove("Banana");
        System.out.println("After removal: " + map);

        // 判断 Map 中是否包含特定的键
        boolean containsKey = map.containsKey("Cherry");
        System.out.println("Contains 'Cherry' key: " + containsKey);
    }
}

在这个例子中,HashMap 用于存储水果名称和对应的数量,并展示了常见的操作,如插入、获取、遍历和删除键值对。

5. Queue 接口

Queue 是一个用于存储元素的集合,遵循 FIFO(先入先出)原则。常见的实现类有 LinkedList, PriorityQueue 等。

5.1 常见实现类:

  • LinkedList:基于双向链表实现,支持队列操作(offer(), poll(), peek())。
  • PriorityQueue:基于优先级队列实现,元素按自然顺序或自定义排序。

5.2 示例:使用 LinkedList 实现 Queue

import java.util.*;

public class QueueExample {
    public static void main(String[] args) {
        // 创建一个 LinkedList 作为 Queue
        Queue<String> queue = new LinkedList<>();

        // 添加元素
        queue.offer("Apple");
        queue.offer("Banana");
        queue.offer("Cherry");

        // 获取并移除队首元素
        System.out.println("Poll: " + queue.poll());

        // 查看队首元素
        System.out.println("Peek: " + queue.peek());

        // 遍历队列
        System.out.println("Queue contents: ");
        for (String item : queue) {
            System.out.println(item);
        }
    }
}

在这个例子中,LinkedList 被用作队列,演示了队列的基本操作,包括元素的添加、查看和删除。

6. 常见操作:

6.1 判断集合是否为空

Set<String> set = new HashSet<>();
if (set.isEmpty()) {
    System.out.println("Set is empty.");
}

6.2 获取集合的大小

List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
System.out.println("List size: " + list.size());

6.3 清空集合

Set<String> set = new HashSet<>();
set.add("Apple");
set.add("Banana");
set.clear();  // 清空集合
System.out.println("Set after clear: " + set);

7. 总结

Java 集合框架提供了多种不同类型的集合接口和实现类,开发者可以根据实际需求选择最合适的集合类。集合框架不仅支持常见的增、删、查、改等操作,还为性能优化、线程安全、排序等场景提供了不同的解决方案。

  • List:有序集合,允许重复元素。常用实现:ArrayList, LinkedList
  • Set:无序集合,不允许重复元素。常用实现:HashSet, LinkedHashSet, TreeSet
  • Map:键值对集合,键唯一,值可重复。常用实现:HashMap, LinkedHashMap, TreeMap
  • Queue:遵循 FIFO(先入先出)原则的集合。常用实现:LinkedList, PriorityQueue

选择合适的集合类,可以让代码更加高效、简洁。

Java碎碎念 文章被收录于专栏

来一杯咖啡,聊聊Java的碎碎念呀

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务