《掌握 Java:从基础到高级概念的综合指南》(3/15)
目录
1. 引言
2. 集合框架概述
2.1 集合框架的类层次结构
3. List 接口
3.1 ArrayList
3.2 LinkedList
3.3 ArrayList vs LinkedList 对比
4. Set 接口
4.1 HashSet
4.2 TreeSet
4.3 HashSet vs TreeSet 对比
5. Map 接口
5.1 HashMap
5.2 TreeMap
5.3 HashMap vs TreeMap 对比
6. 集合工具类 Collections 的使用
6.1 排序
7. 结论
Java 集合框架基础
1. 引言
集合框架是 Java 中非常重要的一部分,它提供了一整套用于存储和处理数据的接口和类,使开发者能够更高效地管理数据。Java 集合框架包括了多种集合类,如 List、Set、Map,它们具有不同的特性和使用场景。本篇文章将全面介绍 Java 集合框架的基本概念、集合的实现类及其特性、常见的集合操作以及集合工具类的使用。
2. 集合框架概述
Java 集合框架主要由以下几个接口构成:
-
Collection 接口:定义了存储一组对象的方法,是 List、Set 等接口的父接口。
-
Map 接口:用于存储键值对。
-
Iterable 接口:使集合可以被迭代,所有的集合类都实现了这个接口。
2.1 集合框架的类层次结构
Java 集合框架提供了一组丰富的类和接口,其类层次结构如下:
java.lang.Object
|
+-- java.util.Collection
|
+-- java.util.List
| +-- ArrayList, LinkedList, Vector
|
+-- java.util.Set
+-- HashSet, TreeSet, LinkedHashSet
+-- java.util.Map
+-- HashMap, TreeMap, LinkedHashMap
-
List:允许重复元素,保持插入顺序。
-
Set:不允许重复元素。
-
Map:键值对形式的存储,不允许键重复。
3. List 接口
List 接口是一种有序集合,允许元素重复,提供了通过索引访问元素的方法。
3.1 ArrayList
ArrayList 是最常用的 List 实现类,基于动态数组实现。
代码示例:ArrayList 的使用
import java.util.ArrayList;
public class ArrayListExample {
public static void main(String[] args) {
ArrayList<String> fruits = new ArrayList<>();
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Orange");
fruits.add("Apple"); // 允许重复元素
System.out.println("Fruits: " + fruits);
// 使用索引访问元素
System.out.println("First fruit: " + fruits.get(0));
// 遍历集合
for (String fruit : fruits) {
System.out.println(fruit);
}
}
}
3.2 LinkedList
LinkedList 基于链表实现,适合频繁插入和删除操作的场景。
代码示例:LinkedList 的使用
import java.util.LinkedList;
public class LinkedListExample {
public static void main(String[] args) {
LinkedList<String> animals = new LinkedList<>();
animals.add("Dog");
animals.add("Cat");
animals.addFirst("Elephant"); // 在头部添加元素
animals.addLast("Tiger"); // 在尾部添加元素
System.out.println("Animals: " + animals);
// 删除元素
animals.remove("Cat");
System.out.println("After removal: " + animals);
// 获取第一个和最后一个元素
System.out.println("First Animal: " + animals.getFirst());
System.out.println("Last Animal: " + animals.getLast());
}
}
3.3 ArrayList vs LinkedList 对比
特性 | ArrayList | LinkedList |
---|---|---|
底层实现 | 动态数组 | 双向链表 |
访问速度 | 访问元素快 (O(1)) | 访问元素慢 (O(n)) |
插入/删除速度 | 末尾操作快,随机位置慢 (O(n)) | 插入、删除快 (头尾 O(1)) |
内存消耗 | 相对较少 | 较多 (需存储指针) |
4. Set 接口
Set 接口是一种不允许重复元素的集合,常用于需要唯一性的数据存储。
4.1 HashSet
HashSet 是基于哈希表实现的,元素的存储顺序并不保证。
代码示例:HashSet 的使用
import java.util.HashSet;
public class HashSetExample {
public static void main(String[] args) {
HashSet<String> cities = new HashSet<>();
cities.add("New York");
cities.add("Los Angeles");
cities.add("Chicago");
cities.add("New York"); // 重复元素不会被添加
System.out.println("Cities: " + cities);
// 判断元素是否存在
if (cities.contains("Chicago")) {
System.out.println("Chicago is in the set.");
}
}
}
4.2 TreeSet
TreeSet 是基于红黑树实现的,元素会按照自然顺序或自定义比较器排序。
代码示例:TreeSet 的使用
import java.util.TreeSet;
public class TreeSetExample {
public static void main(String[] args) {
TreeSet<Integer> numbers = new TreeSet<>();
numbers.add(5);
numbers.add(1);
numbers.add(10);
numbers.add(3);
System.out.println("Numbers in ascending order: " + numbers);
// 获取最小和最大的元素
System.out.println("Smallest number: " + numbers.first());
System.out.println("Largest number: " + numbers.last());
}
}
4.3 HashSet vs TreeSet 对比
特性 | HashSet | TreeSet |
底层实现 | 哈希表 | 红黑树 |
元素顺序 | 无序 | 排序 (自然顺序) |
性能 | 添加、删除、查找快 (O(1)) | 添加、删除、查找慢 (O(log n)) |
5. Map 接口
Map 接口用于存储键值对,每个键唯一,键可以映射到一个值。
5.1 HashMap
HashMap 是最常用的 Map 实现,允许存储 null
键和 null
值,存储顺序不保证。
代码示例:HashMap 的使用
import java.util.HashMap;
public class HashMapExample {
public static void main(String[] args) {
HashMap<String, Integer> ageMap = new HashMap<>();
ageMap.put("Alice", 25);
ageMap.put("Bob", 30);
ageMap.put("Charlie", 35);
System.out.println("Age of Alice: " + ageMap.get("Alice"));
// 遍历键值对
for (String name : ageMap.keySet()) {
System.out.println(name + " is " + ageMap.get(name) + " years old.");
}
}
}
5.2 TreeMap
TreeMap 是基于红黑树实现的,键值对按照键的自然顺序或自定义顺序进行排序。
代码示例:TreeMap 的使用
import java.util.TreeMap;
public class TreeMapExample {
public static void main(String[] args) {
TreeMap<String, Integer> scoreMap = new TreeMap<>();
scoreMap.put("Math", 90);
scoreMap.put("English", 85);
scoreMap.put("Science", 92);
System.out.println("Scores: " + scoreMap);
// 获取第一个和最后一个键值对
System.out.println("First entry: " + scoreMap.firstEntry());
System.out.println("Last entry: " + scoreMap.lastEntry());
}
}
5.3 HashMap vs TreeMap 对比
特性 | HashMap | TreeMap |
底层实现 | 哈希表 | 红黑树 |
键的顺序 | 无序 | 排序 (自然顺序) |
性能 | 添加、删除、查找快 (O(1)) | 添加、删除、查找慢 (O(log n)) |
6. 集合工具类 Collections 的使用
Collections
是一个工具类,提供了一些操作集合的方法,如排序、查找、同步化等。
6.1 排序
代码示例:使用 Collections 对 List 进行排序
import java.util.ArrayList;
import java.util.Collections;
public class CollectionsSortExample {
public static void main(String[] args) {
ArrayList<Integer> numbers = new ArrayList<>();
numbers.add(3);
numbers.add(1);
numbers.add(4);
numbers.add(2);
System.out.println("Before sorting: " + numbers);
Collections.sort(numbers); // 对集合进行升序排序
System.out.println("After sorting: " + numbers);
Collections.reverse(numbers); // 对集合进行降序排序
System.out.println("After reversing: " + numbers);
}
}
7. 结论
Java 集合框架为开发者提供了丰富的数据结构和工具类,使得数据管理更加高效和灵活。本文介绍了集合框架的基本接口和常用实现类,包括 List、Set、Map 及其常见操作。通过理解不同集合的特性和适用场景,可以更好地选择合适的数据结构来解决实际问题。在后续的文章中,我们将深入探讨异常处理、输入输出流等 Java 的其他重要特性。
希望本篇文章能够帮助你更好地理解 Java 集合框架的基础知识。如果有任何疑问或想深入了解某些概念,欢迎在评论区留言!