Java集合

image.png

1. Collection 接口

1.1 Collection 接口的方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public static void main(String[] args) {
// Collection是一个接口,ArrayList是它的实现类
Collection<String> coll = new ArrayList<>();
// 添加一个元素
coll.add("a");
coll.add("d");
// 添加一个集合
Collection<String> coll2 = new ArrayList<>();
coll2.add("b");
coll2.add("c");
coll.addAll(coll2);
// 删除一个元素
System.out.println(coll.remove("e"));
// 删除一个集合
coll.removeAll(coll2);
// 判断是否包含
System.out.println(coll.contains("d"));
// 判断是否为空
System.out.println(coll.isEmpty());
// 获取集合大小
System.out.println(coll.size());

}

1.2 迭代器遍历

  • 报错 NoSuchElementException,原因是迭代器的指针已经指向了最后一个元素,再调用 next()方法就会报错
  • 迭代器遍历结束后,指针指向最后一个元素的后面,不会复位
  • 循环中只能使用一次 it.next()
  • 迭代器遍历时,不能使用集合的方法增删元素,否则会报错 ConcurrentModificationException
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public static void main(String[] args) {
Collection<String> coll = new ArrayList<>();
coll.add("a");
coll.add("b");
coll.add("d");
// 迭代器遍历
Iterator<String> it = coll.iterator();
while(it.hasNext()){
String s = it.next();
if("b".equals(s)){
it.remove();
}
}
System.out.println(coll);

}

1.3 增强 for 循环 和 forEach 方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public static void main(String[] args) {
Collection<String> coll = new ArrayList<>();
coll.add("a");
coll.add("b");
coll.add("d");
// 增强 for 循环
for (String s : coll) {
System.out.println(s);
}
// lambda 表达式
coll.forEach(s -> {
System.out.println(s);
});

}

2. List

2.1 List 接口的方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public static void main(String[] args) {
List<Integer> coll = new ArrayList<>();
coll.add(1);
coll.add(2);
coll.add(3);
coll.add(4);
// 删除指定索引的元素 or 删除指定元素(主要根据传入参数的类型选择调用的方法)
coll.remove(2); // 索引
coll.remove(Integer.valueOf(2)); // 元素
// 返回指定索引的元素
System.out.println(coll.get(0));
// 修改指定索引的元素
coll.set(0, 5);
System.out.println(coll);

}

2.2 List 五种遍历方式

  • 迭代器遍历
  • 增强 for 循环
  • lambda 表达式
  • 普通 for 循环
  • 列表迭代器(新增 add 方法)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public static void main(String[] args) {
List<Integer> coll = new ArrayList<>();
coll.add(1);
coll.add(2);
coll.add(3);
coll.add(4);
ListIterator<Integer> it = coll.listIterator();
while(it.hasNext()){
int j = it.next();
if(j == 2){
it.remove();
}
}
System.out.println(coll);
}

3. Set

继承了 Collection 的方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public static void main(String[] args) {
Set<String> s = new HashSet<>();
// 添加元素,元素不保证有序(如果有序可能是插入的数连续,经过哈希运算后分在了相邻位置)
s.add("d");
s.add("h");
s.add("b");
System.out.println(s);
Set<String> s2 = new LinkedHashSet<>();
// 添加元素, 按插入顺序有序
s2.add("d");
s2.add("b");
s2.add("c");
s2.add("a");
s2.add("a");

System.out.println(s2);

Set<String> s3 = new TreeSet<>();
// 添加元素
s3.add("d");
s3.add("b");
s3.add("c");
s3.add("a");
s3.add("a");
System.out.println(s3);
}

4. Map

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40

public static void main(String[] args) {
Map<String, Integer> mp = new HashMap<>();
// 添加元素
mp.put("a", 1);
mp.put("b", 2);
mp.put("c", 4);
// 如果key不存在, 则添加元素
mp.computeIfAbsent("d", k -> 5);
// 如果key存在, 则更新元素
mp.computeIfPresent("a", (k, v) -> v + 1);
// 删除元素, 返回被删除的value
System.out.println(mp.remove("c"));
// 判断是否包含某个key
System.out.println(mp.containsKey("a"));
// 判断是否包含某个value
System.out.println(mp.containsValue(2));
// 获取所有的key
System.out.println(mp.keySet());
// 获取所有的value
System.out.println(mp.values());
// 获取所有的key-value
Set<Map.Entry<String, Integer>> entries = mp.entrySet();
// 遍历方式: 增强for
for(String k: mp.keySet()) {
System.out.println(k + " " + mp.get(k));
}
for(Map.Entry<String, Integer> entry: mp.entrySet()) {
System.out.println(entry.getKey() + " " + entry.getValue());
}
// 迭代器
Iterator<Map.Entry<String, Integer>> it = entries.iterator();
while(it.hasNext()) {
Map.Entry<String, Integer> entry = it.next();
System.out.println(entry.getKey() + " " + entry.getValue());
}
// lambda表达式
mp.forEach((k, v) -> System.out.println(k + " " + v));

}

Java集合
https://kongshuilinhua.github.io/2025/03/13/Java集合/
作者
FireFLy
发布于
2025年3月13日
许可协议