1. 集合框架的核心接口
Java 集合框架的核心接口定义了集合的基本行为,具体实现类通过这些接口提供不同的功能。
(1) Collection 接口
Collection
是所有集合类的根接口,表示一组对象(元素)。主要方法包括:
add(E e)
:添加元素。remove(Object o)
:移除指定元素。contains(Object o)
:判断是否包含某个元素。size()
:返回集合中元素的数量。isEmpty()
:判断集合是否为空。iterator()
:返回一个迭代器,用于遍历集合。
子接口:
- List:有序集合,允许重复元素。
- Set:无序集合,不允许重复元素。
- Queue:队列,通常遵循先进先出(FIFO)规则。
(2) Map 接口
Map
表示键值对(key-value pair)的集合,键是唯一的,值可以重复。主要方法包括:
put(K key, V value)
:插入键值对。get(Object key)
:根据键获取值。remove(Object key)
:移除指定键的映射。containsKey(Object key)
:判断是否包含指定键。containsValue(Object value)
:判断是否包含指定值。keySet()
:返回所有键的集合。values()
:返回所有值的集合。entrySet()
:返回所有键值对的集合。
2. 常见集合类
(1) List 接口的实现类
List
是一个有序集合,允许重复元素,并可以通过索引访问。
ArrayList
- 底层:基于动态数组实现。
- 特点:
- 查询快(通过索引直接访问)。
- 插入和删除慢(需要移动元素)。
- 示例:
1
2
3
4List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
System.out.println(list.get(0)); // 输出 "A"
LinkedList
- 底层:基于双向链表实现。
- 特点:
- 插入和删除快(只需修改指针)。
- 查询慢(需要从头或尾遍历)。
- 示例:
1
2
3
4List<String> list = new LinkedList<>();
list.add("A");
list.add("B");
System.out.println(list.get(1)); // 输出 "B"
Vector
- 底层:类似于 ArrayList,但线程安全(性能较低)。
- 示例:
1
2List<String> list = new Vector<>();
list.add("A");
(2) Set 接口的实现类
Set
是一个不允许重复元素的集合。
HashSet
- 底层:基于哈希表实现。
- 特点:
- 不保证元素顺序。
- 元素必须重写
hashCode()
和equals()
方法。
- 示例:
1
2
3
4
5Set<String> set = new HashSet<>();
set.add("A");
set.add("B");
set.add("A"); // 不会重复添加
System.out.println(set); // 输出 [A, B]
LinkedHashSet
- 底层:基于哈希表和链表实现。
- 特点:维护插入顺序。
- 示例:
1
2
3
4
5Set<String> set = new LinkedHashSet<>();
set.add("A");
set.add("B");
set.add("C");
System.out.println(set); // 输出 [A, B, C]
TreeSet
- 底层:基于红黑树实现。
- 特点:自动排序(自然顺序或自定义比较器)。
- 示例:
1
2
3
4
5Set<Integer> set = new TreeSet<>();
set.add(3);
set.add(1);
set.add(2);
System.out.println(set); // 输出 [1, 2, 3]
(3) Queue 接口的实现类
Queue
主要用于实现队列(FIFO)或优先级队列。
LinkedList
- 特点:实现了
Queue
接口,可以用作队列。 - 示例:
1
2
3
4Queue<String> queue = new LinkedList<>();
queue.offer("A");
queue.offer("B");
System.out.println(queue.poll()); // 输出 "A"
PriorityQueue
- 底层:基于堆实现。
- 特点:按照优先级顺序(默认自然顺序)处理元素。
- 示例:
1
2
3
4
5Queue<Integer> queue = new PriorityQueue<>();
queue.offer(3);
queue.offer(1);
queue.offer(2);
System.out.println(queue.poll()); // 输出 "1"
(4) Map 接口的实现类
HashMap
- 底层:基于哈希表实现。
- 特点:
- 键值对无序。
- 允许一个
null
键和多个null
值。
- 示例:
1
2
3
4Map<String, Integer> map = new HashMap<>();
map.put("A", 1);
map.put("B", 2);
System.out.println(map.get("A")); // 输出 1
LinkedHashMap
- 底层:基于哈希表和链表实现。
- 特点:维护插入顺序。
- 示例:
1
2
3Map<String, Integer> map = new LinkedHashMap<>();
map.put("A", 1);
map.put("B", 2);
TreeMap
- 底层:基于红黑树实现。
- 特点:键值对按键的自然顺序或自定义比较器排序。
- 示例:
1
2
3
4Map<String, Integer> map = new TreeMap<>();
map.put("A", 1);
map.put("B", 2);
System.out.println(map); // 输出 {A=1, B=2}
Hashtable
- 底层:类似于 HashMap,但线程安全(性能较低)。不允许
null
键和null
值。 - 示例:
1
2Map<String, Integer> map = new Hashtable<>();
map.put("A", 1);
3. 集合工具类
Collections
是一个工具类,提供了许多静态方法来操作集合。
排序
1 | List<Integer> list = new ArrayList<>(Arrays.asList(3, 1, 2)); |
反转
1 | Collections.reverse(list); |
查找
1 | int index = Collections.binarySearch(list, 2); |
同步集合
1 | List<String> syncList = Collections.synchronizedList(new ArrayList<>()); |
4. 集合的选择与应用场景
- List:需要有序且允许重复时使用,如日志记录、任务队列。
- Set:需要唯一性时使用,如去重操作。
- Map:需要键值对映射时使用,如缓存、字典。
If you like this blog or find it useful for you, you are welcome to comment on it. You are also welcome to share this blog, so that more people can participate in it. If the images used in the blog infringe your copyright, please contact the author to delete them. Thank you !