Java 集合框架是一个用来存储和操作一组数据的结构化框架。Java 提供了一个称为 Collection Framework 的库,它包括接口和类,用于在程序中处理集合。集合框架提供了很多数据结构(如列表、集合和映射)和算法(如排序和搜索)。
1. 集合框架概述
集合框架由三部分组成:
- 接口:表示集合的抽象数据类型,如 List、Set、Map 等。
- 实现:具体实现接口的类,如 ArrayList、HashSet、HashMap 等。
- 算法:定义在集合上的操作方法,如排序和搜索。
2. Collection 接口
Collection
接口是所有集合类的根接口。它提供了基本的操作方法,如添加、删除和遍历元素。
常用方法:
boolean add(E e)
:添加元素到集合中。boolean remove(Object o)
:从集合中移除指定元素。boolean contains(Object o)
:判断集合是否包含指定元素。int size()
:返回集合中的元素个数。Iterator<E> iterator()
:返回用于遍历集合的迭代器。
3. List 接口
List
接口继承自 Collection
接口,表示一个有序的元素集合。常用实现类包括 ArrayList
、LinkedList
和 Vector
。
常用方法:
E get(int index)
:返回指定位置的元素。E set(int index, E element)
:替换指定位置的元素。void add(int index, E element)
:在指定位置插入元素。E remove(int index)
:移除指定位置的元素。
ArrayList 类
ArrayList
是一个可变大小的数组实现类。适合频繁读取元素的场景。
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add(1, "C"); // 插入元素到指定位置
String element = list.get(0); // 访问元素
list.remove("B"); // 删除元素
LinkedList 类
LinkedList
是一个链表实现类。适合频繁插入和删除元素的场景。
List<String> list = new LinkedList<>();
list.add("A");
list.add("B");
list.addFirst("C"); // 在开头添加元素
String element = list.getLast(); // 访问最后一个元素
list.removeFirst(); // 删除第一个元素
4. Set 接口
Set
接口也继承自 Collection
接口,表示一个不包含重复元素的集合。常用实现类包括 HashSet
、LinkedHashSet
和 TreeSet
。
常用方法:
boolean add(E e)
:添加元素到集合中,如果元素已经存在则返回 false。boolean remove(Object o)
:从集合中移除指定元素。boolean contains(Object o)
:判断集合是否包含指定元素。
HashSet 类
HashSet
是基于哈希表的实现类,不保证元素的顺序。
Set<String> set = new HashSet<>();
set.add("A");
set.add("B");
set.add("A"); // 不会添加重复元素
boolean containsA = set.contains("A"); // 检查元素是否存在
set.remove("B"); // 删除元素
TreeSet 类
TreeSet
是基于红黑树的实现类,保证元素的自然顺序。
Set<String> set = new TreeSet<>();
set.add("B");
set.add("A");
set.add("C");
for (String element : set) {
System.out.println(element); // 输出顺序为 A, B, C
}
5. Map 接口
Map
接口表示键值对的集合,每个键最多对应一个值。常用实现类包括 HashMap
、LinkedHashMap
和 TreeMap
。
常用方法:
V put(K key, V value)
:将指定的值与该映射中的指定键相关联。V get(Object key)
:返回指定键所映射的值。V remove(Object key)
:如果存在该键的映射关系,则将其移除。boolean containsKey(Object key)
:判断映射是否包含指定键。Set<K> keySet()
:返回所有键的集合。
HashMap 类
HashMap
是基于哈希表的实现类,不保证键值对的顺序。
Map<String, Integer> map = new HashMap<>();
map.put("A", 1);
map.put("B", 2);
map.put("A", 3); // 覆盖键 "A" 的值
int value = map.get("A"); // 获取键 "A" 的值
map.remove("B"); // 删除键 "B" 的键值对
boolean containsKeyA = map.containsKey("A"); // 检查是否包含键 "A"
TreeMap 类
TreeMap
是基于红黑树的实现类,保证键值对的自然顺序。
Map<String, Integer> map = new TreeMap<>();
map.put("B", 2);
map.put("A", 1);
map.put("C", 3);
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + " = " + entry.getValue()); // 输出顺序为 A=1, B=2, C=3
}
6. Collections 类
Collections
类提供了各种操作集合的方法,如排序、搜索和线程安全的集合。
常用方法:
static <T> void sort(List<T> list)
:对列表进行排序。static <T> int binarySearch(List<? extends Comparable<? super T>> list, T key)
:使用二分搜索法查找元素。static <T> void shuffle(List<T> list)
:对列表进行随机排序。
List<String> list = new ArrayList<>();
list.add("B");
list.add("A");
list.add("C");
Collections.sort(list); // 排序
Collections.shuffle(list); // 随机排序
int index = Collections.binarySearch(list, "A"); // 查找元素
7. 迭代器(Iterator)
迭代器用于遍历集合中的元素。Iterator
接口提供了遍历集合的方法。
常用方法:
boolean hasNext()
:如果迭代器中还有元素,则返回 true。E next()
:返回迭代器中的下一个元素。void remove()
:移除迭代器返回的最后一个元素。
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String element = iterator.next();
if (element.equals("B")) {
iterator.remove(); // 删除元素
}
}