学习开发之集合

温馨提示:想很好理解多态,就多理解这篇文章

在 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

✅ 四、集合通用特性总结

特性数组ListSetMap
有序性-
元素重复Key 不可重复
动态扩容
访问方式下标下标、迭代迭代Key、EntrySet
实现类N/AArrayList, LinkedListHashSet, TreeSetHashMap, TreeMap

✅ 五、其他常用集合类

类型说明
ArrayList动态数组实现,随机访问快
LinkedList双向链表实现,插入删除快
HashSet基于哈希表,快速查找
TreeSet基于红黑树,支持排序
HashMap哈希表实现,键值对
TreeMap红黑树实现,按键排序
LinkedHashSet / LinkedHashMap保持插入顺序

java还提供线程安全的集合、并发包下的集合(如 ConcurrentHashMap, CopyOnWriteArrayList)或者集合工具类(如 Collections 工具方法),也可以告诉我!