温馨提示:想很好理解多态,就多理解这篇文章
在 Java 中,集合(Collection) 是比数组更灵活的数据结构,它属于 java.util 包。Java 集合框架提供了多种接口和类来操作数据,例如:List, Set, Map 等。
下面通过详细的代码示例,展示 Java 集合的特性,包括:
- 动态扩容
- 常用操作(增、删、改、查)
- 遍历方式
- 不同类型集合的特点(如 List、Set、Map)
✅ 一、List 接口(有序、可重复)
import java.util.ArrayList;
import java.util.List;public class ListExample {public static void main(String[] args) {// 创建一个 ArrayListList<String> list = new ArrayList<>();// 添加元素list.add("Apple");list.add("Banana");list.add("Orange");list.add(1, "Grape"); // 插入到指定位置// 打印集合System.out.println("List: " + list);// 修改元素list.set(2, "Mango");// 删除元素list.remove("Banana"); // 按值删除list.remove(0); // 按索引删除// 查找元素System.out.println("是否包含 Mango? " + list.contains("Mango"));// 获取大小System.out.println("List 大小: " + list.size());// 遍历方式 1:普通 for 循环for (int i = 0; i < list.size(); i++) {System.out.print(list.get(i) + " ");}System.out.println();// 遍历方式 2:增强 for 循环for (String fruit : list) {System.out.print(fruit + " ");}System.out.println();// 遍历方式 3:迭代器java.util.Iterator<String> iterator = list.iterator();while (iterator.hasNext()) {System.out.print(iterator.next() + " ");}System.out.println();// 清空集合list.clear();System.out.println("清空后: " + list);}
}
特性总结:
- 元素有序
- 可以存储重复元素
- 支持动态扩容(自动增长)
- 可以按索引访问
✅ 二、Set 接口(无序、不可重复)
import java.util.HashSet;
import java.util.Set;public class SetExample {public static void main(String[] args) {Set<String> set = new HashSet<>();// 添加元素(重复元素不会被添加)set.add("Java");set.add("Python");set.add("C++");set.add("Java"); // 无效System.out.println("Set: " + set);// 判断是否包含某个元素System.out.println("是否包含 Python? " + set.contains("Python"));// 删除元素set.remove("C++");// 遍历for (String lang : set) {System.out.print(lang + " ");}System.out.println();// 清空集合set.clear();System.out.println("清空后: " + set);}
}
特性总结:
- 元素无序
- 不允许存储重复元素
- 适合去重、查找快(基于哈希表实现)
✅ 三、Map 接口(键值对、键唯一)
import java.util.HashMap;
import java.util.Map;public class MapExample {public static void main(String[] args) {Map<String, Integer> map = new HashMap<>();// 存储键值对map.put("Alice", 95);map.put("Bob", 88);map.put("Charlie", 90);// 更新值map.put("Bob", 92);// 获取值System.out.println("Alice 的分数: " + map.get("Alice"));// 是否存在 keySystem.out.println("是否包含 key 'Bob'? " + map.containsKey("Bob"));// 删除键值对map.remove("Charlie");// 遍历方式 1:遍历 EntrySetfor (Map.Entry<String, Integer> entry : map.entrySet()) {System.out.println(entry.getKey() + ": " + entry.getValue());}// 遍历方式 2:遍历 KeySetfor (String name : map.keySet()) {System.out.println(name);}// 清空map.clear();System.out.println("清空后: " + map);}
}
特性总结:
- 存储键值对(Key-Value)
- Key 是唯一的(类似 Set),Value 可以重复
- 查询效率高(O(1))
- 键是无序的(若需要有序可用
TreeMap或LinkedHashMap)
✅ 四、集合通用特性总结
| 特性 | 数组 | List | Set | Map |
|---|---|---|---|---|
| 有序性 | ✅ | ✅ | ❌ | - |
| 元素重复 | ✅ | ✅ | ❌ | Key 不可重复 |
| 动态扩容 | ❌ | ✅ | ✅ | ✅ |
| 访问方式 | 下标 | 下标、迭代 | 迭代 | Key、EntrySet |
| 实现类 | N/A | ArrayList, LinkedList | HashSet, TreeSet | HashMap, TreeMap |
✅ 五、其他常用集合类
| 类型 | 说明 |
|---|---|
ArrayList | 动态数组实现,随机访问快 |
LinkedList | 双向链表实现,插入删除快 |
HashSet | 基于哈希表,快速查找 |
TreeSet | 基于红黑树,支持排序 |
HashMap | 哈希表实现,键值对 |
TreeMap | 红黑树实现,按键排序 |
LinkedHashSet / LinkedHashMap | 保持插入顺序 |
java还提供线程安全的集合、并发包下的集合(如 ConcurrentHashMap, CopyOnWriteArrayList)或者集合工具类(如 Collections 工具方法),也可以告诉我!