1. List 集合
List
是一个有序集合,允许重复的元素,可以通过索引访问元素。
1.1 ArrayList
-
创建语法
java复制
List<String> arrayList = new ArrayList<>();
或者初始化时添加元素:
java复制
List<String> arrayList = new ArrayList<>(Arrays.asList("apple", "banana", "cherry"));
-
应用场景
-
频繁的随机访问:
ArrayList
基于动态数组实现,随机访问(通过索引访问)非常快,时间复杂度为 O(1)。 -
元素顺序重要:适用于需要保持元素插入顺序的场景。
-
较少的插入和删除操作:插入和删除操作可能需要移动大量元素,效率较低。
示例代码
java复制
List<String> fruits = new ArrayList<>(); fruits.add("apple"); fruits.add("banana"); fruits.add("cherry"); System.out.println(fruits.get(1)); // 输出:banana fruits.set(1, "orange"); // 替换索引为1的元素 System.out.println(fruits); // 输出:[apple, orange, cherry]
-
1.2 LinkedList
-
创建语法
java复制
List<String> linkedList = new LinkedList<>();
或者初始化时添加元素:
java复制
List<String> linkedList = new LinkedList<>(Arrays.asList("apple", "banana", "cherry"));
-
应用场景
-
频繁的插入和删除操作:
LinkedList
基于双向链表实现,插入和删除操作非常快,时间复杂度为 O(1)。 -
实现队列和栈:
LinkedList
实现了Deque
接口,可以作为双端队列使用,适用于需要频繁从两端添加或删除元素的场景。
示例代码
java复制
List<String> fruits = new LinkedList<>(); fruits.add("apple"); fruits.add("banana"); fruits.add("cherry"); fruits.addFirst("pear"); // 在头部添加元素 fruits.addLast("grape"); // 在尾部添加元素 System.out.println(fruits); // 输出:[pear, apple, banana, cherry, grape] String first = fruits.removeFirst(); // 移除并返回第一个元素 System.out.println(first); // 输出:pear System.out.println(fruits); // 输出:[apple, banana, cherry, grape]
-
1.3 Vector
-
创建语法
java复制
List<String> vector = new Vector<>();
或者初始化时添加元素:
java复制
List<String> vector = new Vector<>(Arrays.asList("apple", "banana", "cherry"));
-
应用场景
-
线程安全:
Vector
是线程安全的,适用于多线程环境,但性能比ArrayList
低。 -
较少的并发操作:如果需要线程安全的集合,但并发操作较少,可以使用
Vector
。
示例代码
java复制
List<String> fruits = new Vector<>(); fruits.add("apple"); fruits.add("banana"); fruits.add("cherry"); System.out.println(fruits.get(1)); // 输出:banana fruits.set(1, "orange"); // 替换索引为1的元素 System.out.println(fruits); // 输出:[apple, orange, cherry]
-
1.4 Stack
-
创建语法
java复制
Stack<String> stack = new Stack<>();
-
应用场景
-
后进先出(LIFO)操作:
Stack
是一个后进先出的集合,适用于需要栈操作的场景,如括号匹配、表达式求值等。
示例代码
java复制
Stack<String> stack = new Stack<>(); stack.push("apple"); stack.push("banana"); stack.push("cherry"); System.out.println(stack.pop()); // 输出:cherry System.out.println(stack.peek()); // 输出:banana System.out.println(stack); // 输出:[apple, banana]
-
2. Set 集合
Set
是一个不允许重复元素的集合,没有索引,元素的顺序不确定(除了 LinkedHashSet
)。
2.1 HashSet
-
创建语法
java复制
Set<String> hashSet = new HashSet<>();
或者初始化时添加元素:
java复制
Set<String> hashSet = new HashSet<>(Arrays.asList("apple", "banana", "cherry"));
-
应用场景
-
快速查找:
HashSet
基于哈希表实现,查找、添加和删除操作的时间复杂度为 O(1)。 -
去重:适用于需要存储唯一元素的场景。
示例代码
java复制
Set<String> fruits = new HashSet<>(); fruits.add("apple"); fruits.add("banana"); fruits.add("cherry"); fruits.add("apple"); // 重复元素不会被添加 System.out.println(fruits); // 输出:[banana, cherry, apple](顺序不确定) System.out.println(fruits.contains("banana")); // 输出:true
-
2.2 LinkedHashSet
-
创建语法
java复制
Set<String> linkedHashSet = new LinkedHashSet<>();
或者初始化时添加元素:
java复制
Set<String> linkedHashSet = new LinkedHashSet<>(Arrays.asList("apple", "banana", "cherry"));
-
应用场景
-
保持插入顺序:
LinkedHashSet
保留了元素的插入顺序,适用于需要去重且保持顺序的场景。 -
快速查找:和
HashSet
一样,查找、添加和删除操作的时间复杂度为 O(1)。
示例代码
java复制
Set<String> fruits = new LinkedHashSet<>(); fruits.add("apple"); fruits.add("banana"); fruits.add("cherry"); fruits.add("apple"); // 重复元素不会被添加 System.out.println(fruits); // 输出:[apple, banana, cherry](保持插入顺序) System.out.println(fruits.contains("banana")); // 输出:true
-
2.3 TreeSet
-
创建语法
java复制
Set<String> treeSet = new TreeSet<>();
或者初始化时添加元素:
java复制
Set<String> treeSet = new TreeSet<>(Arrays.asList("apple", "banana", "cherry"));
-
应用场景
-
有序存储:
TreeSet
基于红黑树实现,元素会自动按照自然顺序(或自定义比较器)排序。 -
范围查询:适用于需要有序存储和范围查询的场景。
示例代码
java复制
Set<String> fruits = new TreeSet<>(); fruits.add("apple"); fruits.add("banana"); fruits.add("cherry"); System.out.println(fruits); // 输出:[apple, banana, cherry](按字典序排序) System.out.println(fruits.first()); // 输出:apple System.out.println(fruits.last()); // 输出:cherry
-
3. Map 集合
Map
是一个键值对的集合,键是唯一的,但值可以重复。
3.1 HashMap
-
创建语法
java复制
Map<String, Integer> hashMap = new HashMap<>();
或者初始化时添加键值对:
java复制
Map<String, Integer> hashMap = new HashMap<>(); hashMap.put("apple", 1); hashMap.put("banana", 2); hashMap.put("cherry", 3);
-
应用场景
-
快速查找:
HashMap
基于哈希表实现,查找、添加和删除操作的时间复杂度为 O(1)。 -
键值对存储:适用于需要存储键值对的场景。
示例代码
java复制
Map<String, Integer> fruits = new HashMap<>(); fruits.put("apple", 1); fruits.put("banana", 2); fruits.put("cherry", 3); System.out.println(fruits.get("banana")); // 输出:2 fruits.remove("banana"); // 移除键为"banana"的键值对 System.out.println(fruits); // 输出:{apple=1, cherry=3}
-
3.2 LinkedHashMap
-
创建语法
java复制
Map<String, Integer> linkedHashMap = new LinkedHashMap<>();
或者初始化时添加键值对:
java复制
Map<String, Integer>