Java集合框架详解
什么是Java集合框架
Java集合框架(Java Collections Framework)是一组统一的架构,用于表示和操作集合。它包括接口、实现类和算法,使开发者能够以高效、标准的方式处理对象集合。
集合框架的核心优势在于减少编程工作量、提高性能和代码质量。
三大核心接口
List(有序集合)
List是有序的、可重复的集合,允许通过索引访问元素。
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class ListDemo {
public static void main(String[] args) {
List<String> arrayList = new ArrayList<>();
arrayList.add("Java");
arrayList.add("Python");
arrayList.add("C++");
System.out.println("ArrayList: " + arrayList);
List<String> linkedList = new LinkedList<>();
linkedList.add("Spring");
linkedList.add("Hibernate");
linkedList.add("MyBatis");
System.out.println("LinkedList: " + linkedList);
System.out.println("第一个元素: " + arrayList.get(0));
arrayList.set(0, "Kotlin");
System.out.println("修改后: " + arrayList);
arrayList.remove("C++");
System.out.println("删除后: " + arrayList);
}
}
Set(无序集合)
Set是无序的、不可重复的集合,不允许存储相同的元素。
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.TreeSet;
public class SetDemo {
public static void main(String[] args) {
Set<String> hashSet = new HashSet<>();
hashSet.add("Java");
hashSet.add("Python");
hashSet.add("Java");
System.out.println("HashSet: " + hashSet);
System.out.println("HashSet大小: " + hashSet.size());
Set<String> linkedHashSet = new LinkedHashSet<>();
linkedHashSet.add("Spring");
linkedHashSet.add("Hibernate");
linkedHashSet.add("MyBatis");
System.out.println("LinkedHashSet: " + linkedHashSet);
Set<String> treeSet = new TreeSet<>();
treeSet.add("C");
treeSet.add("A");
treeSet.add("B");
System.out.println("TreeSet: " + treeSet);
System.out.println("包含Java: " + hashSet.contains("Java"));
}
}
Map(键值对集合)
Map存储键值对,键不能重复,每个键最多映射一个值。
import java.util.HashMap;
import java.util.Map;
public class MapDemo {
public static void main(String[] args) {
Map<String, Integer> hashMap = new HashMap<>();
hashMap.put("Java", 100);
hashMap.put("Python", 90);
hashMap.put("C++", 85);
System.out.println("HashMap: " + hashMap);
System.out.println("Java分数: " + hashMap.get("Java"));
System.out.println("包含Python: " + hashMap.containsKey("Python"));
System.out.println("包含90分: " + hashMap.containsValue(90));
for (Map.Entry<String, Integer> entry : hashMap.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
System.out.println("所有键: " + hashMap.keySet());
System.out.println("所有值: " + hashMap.values());
hashMap.replace("Java", 105);
System.out.println("替换后: " + hashMap);
hashMap.remove("C++");
System.out.println("移除后: " + hashMap);
}
}
Collections工具类
Collections工具类提供了对集合进行操作的静态方法:
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class CollectionsUtilDemo {
public static void main(String[] args) {
List<Integer> numbers = new ArrayList<>();
numbers.add(5);
numbers.add(2);
numbers.add(8);
numbers.add(1);
numbers.add(9);
System.out.println("原始列表: " + numbers);
Collections.sort(numbers);
System.out.println("排序后: " + numbers);
Collections.reverse(numbers);
System.out.println("反转后: " + numbers);
Collections.shuffle(numbers);
System.out.println("打乱后: " + numbers);
System.out.println("最大值: " + Collections.max(numbers));
System.out.println("最小值: " + Collections.min(numbers));
List<String> syncList = Collections.synchronizedList(new ArrayList<>());
}
}
集合框架最佳实践
- 选择合适的集合类型:根据需求选择List、Set或Map
- 指定初始容量:避免频繁扩容影响性能
- 使用泛型:保证类型安全,避免ClassCastException
- 合理使用不可变集合:使用Collections.unmodifiableList创建不可变视图
- 注意线程安全:多线程环境使用线程安全的集合或同步机制
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class BestPractice {
public static void main(String[] args) {
List<String> list = new ArrayList<>(100);
List<Integer> intList = new ArrayList<>();
intList.add(100);
List<String> immutableList = Collections.unmodifiableList(
new ArrayList<>(List.of("Java", "Python", "C++"))
);
}
}
总结
Java集合框架是Java编程中最重要的基础设施之一。掌握List、Set、Map三大接口及其常用实现类,能够帮助开发者高效地处理各种数据结构需求。在实际开发中,应根据具体场景选择最合适的集合类型,并遵循最佳实践原则。