Initial commit
This commit is contained in:
175
docs/java/collection.md
Normal file
175
docs/java/collection.md
Normal file
@@ -0,0 +1,175 @@
|
||||
# 集合框架
|
||||
|
||||
## 集合体系结构
|
||||
|
||||
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));
|
||||
```
|
||||
Reference in New Issue
Block a user