Java 提供了丰富的集合类,主要分为 Collection
和 Map
两大体系。Collection
体系用于存储单个元素,Map
体系用于存储键值对。以下是 Java 中常用集合类及其用法的详细介绍。
Collection
体系
1. List
接口
List
接口是有序的集合,允许存储重复元素,常见的实现类有 ArrayList
和 LinkedList
。
ArrayList
- 特点:基于动态数组实现,随机访问速度快,但插入和删除操作在中间或开头位置效率较低。
- 用法示例:
import java.util.ArrayList; import java.util.List; public class ArrayListExample { public static void main(String[] args) { // 创建 ArrayList 对象 List<String> list = new ArrayList<>(); // 添加元素 list.add("apple"); list.add("banana"); // 获取指定位置的元素 System.out.println(list.get(0)); // 修改指定位置的元素 list.set(0, "cherry"); // 删除元素 list.remove(1); // 遍历元素 for (String element : list) { System.out.println(element); } } }
LinkedList
- 特点:基于双向链表实现,插入和删除操作效率高,尤其是在中间或开头位置,但随机访问速度较慢。
- 用法示例:
import java.util.LinkedList; import java.util.List; public class LinkedListExample { public static void main(String[] args) { // 创建 LinkedList 对象 List<String> list = new LinkedList<>(); // 添加元素 list.add("apple"); list.addFirst("banana"); list.addLast("cherry"); // 删除第一个元素 list.removeFirst(); // 删除最后一个元素 list.removeLast(); // 遍历元素 for (String element : list) { System.out.println(element); } } }
2.
Set
接口Set
接口是不允许存储重复元素的集合,常见的实现类有HashSet
、LinkedHashSet
和TreeSet
。HashSet
- 特点:基于哈希表实现,不保证元素的顺序,允许存储
null
元素。 - 用法示例:
import java.util.HashSet; import java.util.Set; public class HashSetExample { public static void main(String[] args) { // 创建 HashSet 对象 Set<String> set = new HashSet<>(); // 添加元素 set.add("apple"); set.add("banana"); // 尝试添加重复元素 set.add("apple"); // 判断集合中是否包含指定元素 System.out.println(set.contains("apple")); // 遍历元素 for (String element : set) { System.out.println(element); } } }
LinkedHashSet
- 特点:基于哈希表和链表实现,保证元素的插入顺序。
- 用法示例:
TreeSet
- 特点:基于红黑树实现,元素会按照自然顺序或指定的比较器进行排序。
- 用法示例:
import java.util.TreeSet; import java.util.Set; public class TreeSetExample { public static void main(String[] args) { // 创建 TreeSet 对象 Set<Integer> set = new TreeSet<>(); // 添加元素 set.add(3); set.add(1); set.add(2); // 遍历元素,元素按升序排列 for (Integer element : set) { System.out.println(element); } } }
Map
体系HashMap
- 特点:基于哈希表实现,不保证键的顺序,允许存储
null
键和null
值。 - 用法示例:
import java.util.HashMap; import java.util.Map; public class HashMapExample { public static void main(String[] args) { // 创建 HashMap 对象 Map<String, Integer> map = new HashMap<>(); // 添加键值对 map.put("apple", 1); map.put("banana", 2); // 获取指定键对应的值 System.out.println(map.get("apple")); // 判断是否包含指定键 System.out.println(map.containsKey("banana")); // 遍历键值对 for (Map.Entry<String, Integer> entry : map.entrySet()) { System.out.println(entry.getKey() + ": " + entry.getValue()); } } }
LinkedHashMap
- 特点:基于哈希表和链表实现,保证键的插入顺序。
- 用法示例:
import java.util.LinkedHashMap; import java.util.Map; public class LinkedHashMapExample { public static void main(String[] args) { // 创建 LinkedHashMap 对象 Map<String, Integer> map = new LinkedHashMap<>(); // 添加键值对 map.put("apple", 1); map.put("banana", 2); // 遍历键值对,顺序与插入顺序一致 for (Map.Entry<String, Integer> entry : map.entrySet()) { System.out.println(entry.getKey() + ": " + entry.getValue()); } } }
TreeMap
- 特点:基于红黑树实现,键会按照自然顺序或指定的比较器进行排序。
- 用法示例:
import java.util.TreeMap; import java.util.Map; public class TreeMapExample { public static void main(String[] args) { // 创建 TreeMap 对象 Map<Integer, String> map = new TreeMap<>(); // 添加键值对 map.put(3, "apple"); map.put(1, "banana"); map.put(2, "cherry"); // 遍历键值对,键按升序排列 for (Map.Entry<Integer, String> entry : map.entrySet()) { System.out.println(entry.getKey() + ": " + entry.getValue()); } } }
这些集合类在不同的场景下有各自的优势,你可以根据具体需求选择合适的集合类来使用。