初识集合
# 一、初识集合
# (1)集合是什么?为什么要用集合?
保存数据会经常使用到数组,但数组存在以下几个缺陷:
- 长度开始时必须指定,且一旦指定,不能更改;
- 保存的必须为同一类型的元素;
- 使用数组进行增加元素的步骤比较麻烦;
// 使用数组
Item[] items = new Item[1]; // 创建一个初始大小为1的数组
items[0] = new Item(); // 在数组中添加一个元素
// 扩展数组大小
Item[] moreItems = new Item[items.length + 1]; // 创建一个更大的数组以容纳更多元素
System.arraycopy(items, 0, moreItems, 0, items.length); // 将原数组内容复制到新数组中
moreItems[items.length] = new Item(); // 在新数组中添加另一个元素
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
这个时候就需要用一个比数组要“高级的容器”来解决,这就是集合:
- 可以动态保存任意多个不同类型对象,使用方便;
- 提供了一系列方便的操作对象的方法:add、remove、set、get等;
- 使用集合添加、删除新元素要简单的多;
// 使用集合 (集合还提供了泛型支持,可以在编译时检查类型)
List<Item> itemList = new ArrayList<>(); // 创建一个集合
itemList.add(new Item()); // 直接在集合中添加一个元素
itemList.add(new Item()); // 再添加一个元素。集合会自动扩展以容纳更多元素,无需像数组那样手动管理大小
1
2
3
4
2
3
4
# (2)集合的框架体系
Java的集合类有很多,主要分为两大类:
单列集合: 双列集合:
//单列集合
ArrayList arrayList = new ArrayList();
arrayList.add("Jack");
arrayList.add("Tom");
//双列集合
HashMap hashMap = new HashMap();
hashMap.put("No.1","我");
hashMap.put("No.2","你");
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 二、Collection接口
Collection接口实现类的特点:
public interface Collection<E> extends Iterable<E>
1
- Collection实现子类可以存放多个元素,每个元素可以是Object
- 有些Collection的实现类,可以存放重复的元素,有些不可以;
- 有些Collection的实现类,有些是有序的(List),有些则不是有序(Set);
- Collection接口没有直接的实现子类,是通过它的子接口List和Set来实现的;
# (1)Collection接口常用方法
下面这些方法是 List 和 Set 都有的
方法 | 描述 |
---|---|
size() | 返回集合中的元素数量 |
clear() | 清空集合中的所有元素 |
isEmpty() | 检查集合是否为空 |
add(Object e) | 添加单个元素 e |
remove(Object o) | 删除指定元素 o |
contains(Object o) | 检查是否包含元素 o |
addAll(Collection c) | 添加集合 c 中的所有元素 |
containsAll(Collection c) | 检查集合中是否包含集合 c 的所有元素 |
removeAll(Collection c) | 删除集合中包含在集合 c 中的所有元素 |
以 ArrayList 实现类来演示:
import java.util.ArrayList;
import java.util.List;
public class CollectionMethod {
public static void main(String[] args) {
//1.add:添加单个元素
List list = new ArrayList();
list.add("字符串");
list.add(128);//list.add(new Integer(10))
list.add(true);
System.out.println("list="+list);//list=[字符串, 128, true]
//2.remove:删除指定元素
//list.remove(0);//删除第一个元素
//System.out.println("list="+list);//list=[128, true]
list.remove("字符串");//指定删除某个元素
System.out.println("list="+list);//list=[128, true]
//3.contains:查找某个元素是否存在
System.out.println(list.contains(128));//true
//4.size:返回元素个数
System.out.println(list.size());//2
//5.isEmpty:判断是否为空
System.out.println(list.isEmpty());//false
//6.clear:清空
list.clear();
System.out.println("list= "+list);//list= []
//7.addAll:添加多个元素
ArrayList list2 = new ArrayList();
list2.add("开心");
list2.add("每");
list2.add(1);
list2.add("天");
list.addAll(list2);//传入一个集合
System.out.println("新的list:"+list);//新的list:[开心, 每, 1, 天]
//8.containsAll:查找多个元素是否存在
System.out.println(list.containsAll(list2));//true
//9.removeAll:删除多个元素
list.removeAll(list2);
System.out.println("list="+list);//list=[]
}
}
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
41
42
43
44
45
46
47
48
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
41
42
43
44
45
46
47
48
# (2)Iterator(迭代器)遍历元素
- Iterator对象(迭代器):主要用于遍历
Collection
集合中的元素。迭代器提供了一种统一的方法来访问集合中的每个元素,而不需要知道集合的内部结构。 - 集合类和Iterable接口:所有的集合类都实现了
Iterable
接口,这就是为什么它们都可以使用Iterator
迭代器进行遍历。这包括List
,Set
,Queue
等集合类型。 - iterator() 方法:实现了
Iterable
接口的集合类必须提供iterator()
方法。该方法返回一个实现了Iterator
接口的对象,即迭代器。通过迭代器,我们可以遍历集合中的元素。 - Iterator的作用:
Iterator
仅用于遍历集合,它本身并不存储对象。迭代器提供了几个核心方法,如next()
来获取下一个元素,hasNext()
来检查是否还有更多元素,以及remove()
方法来从集合中移除元素。
迭代器执行原理:
Iterator iterator = new coll.iterator(); 得到一个集合迭代器
hasNext() :判断是否还有下一个元素
while(iterator.hasNext()){
next()作用:返回当前指针指向的元素,并将指针移动到下一个元素的位置
System.out.println(iterator.next());
}
1
2
3
4
5
6
7
2
3
4
5
6
7
Iterator的next()方法返回的是Object,每 next() 一次,箭头下移一次:
注意:在调用 iterator.next( ) 方法之前,必须要调用iterator.hasNext( ) 进行检测;若不调用,且下一条记录无效,直接调用 iterator.next( ) 会抛出 NoSuchElementException异常。
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class CollectionIterator {
public static void main(String[] args) {
// 创建 Collection 集合并添加字符串元素
Collection<String> col = new ArrayList<>();
col.add("三国演义");
col.add("红楼梦");
col.add("西游记");
// 先得到col集合对应的迭代器
Iterator<String> iterator = col.iterator();
// 使用迭代器遍历集合
// 快捷键:输入 "itit" 后按回车快速生成 while 循环
// Ctrl+J 可查看当前所有快捷键
while (iterator.hasNext()) { // 判断是否还有数据
String book = iterator.next();
System.out.println(book);
}
// 注意:当退出 while 循环后,迭代器指向最后的元素
// 再次调用 iterator.next() 将引发 NoSuchElementException
// 若要重新使用迭代器,需要重新获取迭代器
iterator = col.iterator();
}
}
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
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
# (3)增强 for 循环遍历元素
- 增强for循环,可以代替 iterator迭代器,底层实际上是使用 Iterator 来实现的
- 特点:增强for循环就是简化版的iterator,本质一样,只能用于遍历集合或数组;
import java.util.ArrayList;
import java.util.Collection;
public class CollectionIterator {
public static void main(String[] args) {
Collection<String> books = new ArrayList<>();
// 添加书籍信息
books.add("三国演义 - 罗贯中 - 10.1");
books.add("红楼梦 - 曹雪芹 - 34.6");
books.add("西游记 - 吴承恩 - 28.8");
// 使用增强for循环遍历集合
for (String book : books) {
System.out.println(book);
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
编辑此页 (opens new window)
上次更新: 2024/12/28, 18:32:08