176 lines
3.0 KiB
Markdown
176 lines
3.0 KiB
Markdown
# 集合框架
|
||
|
||
## 集合体系结构
|
||
|
||
Java集合框架主要分为两大类:
|
||
|
||
1. **Collection接口**:存储单值
|
||
- List:有序、可重复
|
||
- Set:无序、不可重复
|
||
- Queue:队列
|
||
|
||
2. **Map接口**:存储键值对
|
||
|
||
## List集合
|
||
|
||
### ArrayList
|
||
|
||
基于动态数组实现,查询快,增删慢。
|
||
|
||
```java
|
||
import java.util.ArrayList;
|
||
import java.util.List;
|
||
|
||
List<String> list = new ArrayList<>();
|
||
|
||
// 添加元素
|
||
list.add("Java");
|
||
list.add("Python");
|
||
list.add("JavaScript");
|
||
|
||
// 获取元素
|
||
System.out.println(list.get(0)); // Java
|
||
|
||
// 遍历
|
||
for (String item : list) {
|
||
System.out.println(item);
|
||
}
|
||
|
||
// 删除元素
|
||
list.remove("Python");
|
||
|
||
// 集合大小
|
||
System.out.println(list.size()); // 2
|
||
```
|
||
|
||
### LinkedList
|
||
|
||
基于链表实现,增删快,查询慢。
|
||
|
||
```java
|
||
import java.util.LinkedList;
|
||
|
||
LinkedList<String> linkedList = new LinkedList<>();
|
||
|
||
linkedList.addFirst("第一");
|
||
linkedList.addLast("最后");
|
||
linkedList.add("中间");
|
||
|
||
System.out.println(linkedList.getFirst()); // 第一
|
||
System.out.println(linkedList.getLast()); // 最后
|
||
```
|
||
|
||
## Set集合
|
||
|
||
### HashSet
|
||
|
||
基于哈希表实现,无序、不可重复。
|
||
|
||
```java
|
||
import java.util.HashSet;
|
||
import java.util.Set;
|
||
|
||
Set<String> set = new HashSet<>();
|
||
|
||
set.add("Apple");
|
||
set.add("Banana");
|
||
set.add("Apple"); // 重复元素不会被添加
|
||
|
||
System.out.println(set.size()); // 2
|
||
System.out.println(set.contains("Apple")); // true
|
||
```
|
||
|
||
### TreeSet
|
||
|
||
基于红黑树实现,自动排序。
|
||
|
||
```java
|
||
import java.util.TreeSet;
|
||
|
||
Set<Integer> treeSet = new TreeSet<>();
|
||
|
||
treeSet.add(5);
|
||
treeSet.add(1);
|
||
treeSet.add(3);
|
||
|
||
// 输出:1, 3, 5(自动排序)
|
||
for (Integer num : treeSet) {
|
||
System.out.println(num);
|
||
}
|
||
```
|
||
|
||
## Map集合
|
||
|
||
### HashMap
|
||
|
||
基于哈希表实现,键不可重复。
|
||
|
||
```java
|
||
import java.util.HashMap;
|
||
import java.util.Map;
|
||
|
||
Map<String, Integer> map = new HashMap<>();
|
||
|
||
// 添加键值对
|
||
map.put("Java", 1);
|
||
map.put("Python", 2);
|
||
map.put("JavaScript", 3);
|
||
|
||
// 获取值
|
||
System.out.println(map.get("Java")); // 1
|
||
|
||
// 遍历
|
||
for (Map.Entry<String, Integer> entry : map.entrySet()) {
|
||
System.out.println(entry.getKey() + ": " + entry.getValue());
|
||
}
|
||
|
||
// 判断键是否存在
|
||
System.out.println(map.containsKey("Java")); // true
|
||
|
||
// 删除
|
||
map.remove("Python");
|
||
```
|
||
|
||
### TreeMap
|
||
|
||
基于红黑树实现,键自动排序。
|
||
|
||
```java
|
||
import java.util.TreeMap;
|
||
|
||
Map<Integer, String> treeMap = new TreeMap<>();
|
||
|
||
treeMap.put(3, "C");
|
||
treeMap.put(1, "A");
|
||
treeMap.put(2, "B");
|
||
|
||
// 按键排序输出:1=A, 2=B, 3=C
|
||
treeMap.forEach((k, v) -> System.out.println(k + "=" + v));
|
||
```
|
||
|
||
## 集合工具类
|
||
|
||
```java
|
||
import java.util.Collections;
|
||
import java.util.ArrayList;
|
||
import java.util.List;
|
||
|
||
List<Integer> numbers = new ArrayList<>();
|
||
numbers.add(3);
|
||
numbers.add(1);
|
||
numbers.add(2);
|
||
|
||
// 排序
|
||
Collections.sort(numbers); // [1, 2, 3]
|
||
|
||
// 反转
|
||
Collections.reverse(numbers); // [3, 2, 1]
|
||
|
||
// 打乱
|
||
Collections.shuffle(numbers);
|
||
|
||
// 最大最小值
|
||
System.out.println(Collections.max(numbers));
|
||
System.out.println(Collections.min(numbers));
|
||
```
|