Java Collections Cheat Sheet:深入理解与高效运用
简介
在Java编程中,集合框架(Collections Framework)是一个强大且常用的工具集,用于存储和操作一组对象。Java Collections Cheat Sheet 是对这个框架中各种类和接口的快速参考指南,它可以帮助开发者迅速回忆起关键的方法、特性和使用场景。本文将详细介绍Java Collections Cheat Sheet的相关内容,帮助读者更好地掌握和运用Java集合。
目录
- 基础概念
- 使用方法
- List
- Set
- Map
- 常见实践
- 遍历集合
- 添加和删除元素
- 查找元素
- 最佳实践
- 选择合适的集合类型
- 性能优化
- 小结
- 参考资料
基础概念
Java集合框架主要包含三大接口:List
、Set
和 Map
。
- List
:有序的可重复元素集合,允许通过索引访问元素。例如 ArrayList
和 LinkedList
都是 List
接口的实现类。
- Set
:无序且唯一的元素集合,不允许重复元素。常见的实现类有 HashSet
、TreeSet
等。
- Map
:键值对(key-value pairs)的集合,一个键最多映射到一个值。HashMap
、TreeMap
是常用的实现类。
使用方法
List
创建 List
import java.util.ArrayList;
import java.util.List;
public class ListExample {
public static void main(String[] args) {
// 创建一个 ArrayList
List<String> list = new ArrayList<>();
}
}
添加元素
import java.util.ArrayList;
import java.util.List;
public class ListAddExample {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add(1, "Cherry"); // 在索引 1 处插入元素
}
}
获取元素
import java.util.ArrayList;
import java.util.List;
public class ListGetExample {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
String element = list.get(1); // 获取索引 1 处的元素
System.out.println(element);
}
}
Set
创建 Set
import java.util.HashSet;
import java.util.Set;
public class SetExample {
public static void main(String[] args) {
// 创建一个 HashSet
Set<String> set = new HashSet<>();
}
}
添加元素
import java.util.HashSet;
import java.util.Set;
public class SetAddExample {
public static void main(String[] args) {
Set<String> set = new HashSet<>();
set.add("Apple");
set.add("Banana");
set.add("Apple"); // 重复元素不会被添加
}
}
Map
创建 Map
import java.util.HashMap;
import java.util.Map;
public class MapExample {
public static void main(String[] args) {
// 创建一个 HashMap
Map<String, Integer> map = new HashMap<>();
}
}
添加键值对
import java.util.HashMap;
import java.util.Map;
public class MapPutExample {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("Apple", 10);
map.put("Banana", 20);
}
}
获取值
import java.util.HashMap;
import java.util.Map;
public class MapGetExample {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("Apple", 10);
Integer value = map.get("Apple");
System.out.println(value);
}
}
常见实践
遍历集合
遍历 List
import java.util.ArrayList;
import java.util.List;
public class ListTraversalExample {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
// 传统 for 循环
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
// 增强 for 循环
for (String element : list) {
System.out.println(element);
}
}
}
遍历 Set
import java.util.HashSet;
import java.util.Set;
public class SetTraversalExample {
public static void main(String[] args) {
Set<String> set = new HashSet<>();
set.add("Apple");
set.add("Banana");
// 增强 for 循环
for (String element : set) {
System.out.println(element);
}
}
}
遍历 Map
import java.util.HashMap;
import java.util.Map;
public class MapTraversalExample {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("Apple", 10);
map.put("Banana", 20);
// 遍历键值对
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
// 遍历键
for (String key : map.keySet()) {
System.out.println(key);
}
// 遍历值
for (Integer value : map.values()) {
System.out.println(value);
}
}
}
添加和删除元素
List 添加和删除元素
import java.util.ArrayList;
import java.util.List;
public class ListModifyExample {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add(1, "Cherry"); // 在索引 1 处插入元素
list.remove("Banana"); // 删除指定元素
list.remove(0); // 删除指定索引处的元素
}
}
Set 添加和删除元素
import java.util.HashSet;
import java.util.Set;
public class SetModifyExample {
public static void main(String[] args) {
Set<String> set = new HashSet<>();
set.add("Apple");
set.add("Banana");
set.add("Cherry"); // 添加元素
set.remove("Banana"); // 删除元素
}
}
Map 添加和删除键值对
import java.util.HashMap;
import java.util.Map;
public class MapModifyExample {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("Apple", 10);
map.put("Banana", 20);
map.put("Cherry", 30); // 添加键值对
map.remove("Banana"); // 删除指定键的键值对
}
}
查找元素
在 List 中查找元素
import java.util.ArrayList;
import java.util.List;
public class ListSearchExample {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
int index = list.indexOf("Banana"); // 返回元素的索引
boolean contains = list.contains("Cherry"); // 判断是否包含指定元素
}
}
在 Set 中查找元素
import java.util.HashSet;
import java.util.Set;
public class SetSearchExample {
public static void main(String[] args) {
Set<String> set = new HashSet<>();
set.add("Apple");
set.add("Banana");
boolean contains = set.contains("Cherry"); // 判断是否包含指定元素
}
}
在 Map 中查找元素
import java.util.HashMap;
import java.util.Map;
public class MapSearchExample {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("Apple", 10);
map.put("Banana", 20);
Integer value = map.get("Apple"); // 通过键获取值
boolean containsKey = map.containsKey("Cherry"); // 判断是否包含指定键
}
}
最佳实践
选择合适的集合类型
- 如果需要有序且可重复的元素集合:选择
List
,如ArrayList
适用于频繁的随机访问,LinkedList
适用于频繁的插入和删除操作。 - 如果需要唯一且无序的元素集合:选择
Set
,HashSet
性能较好,TreeSet
可以对元素进行排序。 - 如果需要存储键值对:选择
Map
,HashMap
性能高,TreeMap
按键排序。
性能优化
- 避免不必要的装箱和拆箱:使用
ArrayList<Integer>
时,尽量使用int
基本类型的方法(如果有),以减少性能开销。 - 预分配合适的容量:对于
ArrayList
和HashMap
,可以在创建时指定初始容量,避免频繁的扩容操作。
小结
Java Collections Cheat Sheet 涵盖了集合框架中各种接口和类的基本使用方法、常见实践以及最佳实践。通过掌握这些内容,开发者可以更加高效地使用集合来解决实际问题,提高代码的质量和性能。
参考资料
- Oracle Java Documentation - Collections Framework
- 《Effective Java》 by Joshua Bloch