# Java教程 - 9 集合
什么是集合?
集合就是可以存储多个数据的一种数据类型,集合内的每一个数据称之为元素,其中的元素可以是任意类型的数据,包括字符串、数字、布尔,甚至是集合等等。
在前面已经学习了数组,数组也是可以批量的存储数据,但是集合比数组要强大的多。
数字一旦初始化以后,长度就固定了,是无法改变的,而且类型也确定了,同时提供的方法有限,对添加、删除、插入、搜索等操作就很不方便。
在Java中常用的集合分为3类:
- List
- Set
- Map
不同的集合有不同的特点,例如:
- 是否支持重复的元素,有的集合中的元素不能重复,有的可以。
- 是否有序,有的集合中的元素是有序的,可以通过index来获取元素,有的集合是无序的,无法通过index获取元素。
下面一一介绍。
# 9.1 List
List 列表就是一个普通的集合,满足你最原始的想象,主要有如下特点:
- 列表中的元素可以重复;
- 列表中的元素可以修改,可以增加、修改、删除;
- 列表中的元素是有序的,可以通过索引来访问;
- 列表中可以存储不同数据类型的数据;
和数组很像,但是会自动扩容,支持不同类型的数据。
# 1 创建List
// 创建一个String类型的列表,<String>表示泛型
List<String> strList = new ArrayList<>();
// 创建一个Integer类型的列表
List<Integer> numbers = new ArrayList<>();
// 不指定类型,什么元素都可以放,和 List<Object> 一样
List objList = new ArrayList<>();
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
在创建集合的时候,可以通过 <类型>
泛型指定集合中元素的类型,关于泛型,后面在进阶篇再讲解。
指定泛型后,后面在获取集合中元素的时候,获取的数据就是泛型指定的类型;如果不指定泛型,那么元素在取出的时候是Object类型,那么赋值给指定类型的变量就需要强制转换,后面获取元素的时候再讲。
还可以在创建的时候,指定List初始化的大小,在使用的时候,如果元素超过了初始容量,会自动进行扩容。
如果知道列表中要放多少数据,建议在新建数组的时候指定列表大初始大小,这样避免扩容,从而耗费性能,因为列表的底层还是使用数组实现的,默认长度是10,而数组是无法动态修改大小的,所以在扩容的时候会创建一个新的列表,将之前列表中的数据拷贝到新列表中。
// 创建一个初始容量为5的ArrayList,用于存储Integer类型的元素
List<Integer> list = new ArrayList<>(5);
1
2
2
还可以创建不可变的List,不可变的List不能添加、修改、删除元素,只能读取元素,否则会报错:
List<String> colorList = List.of("red", "green", "blue");
System.out.println(colorList); // [red, green, blue]
1
2
2
如果想快速创建包含元素的可变 List,可以使用如下方式:
// 将List.of(1, 2, 3)作为参数创建一个新的可变List
List<Integer> numbers = new ArrayList<>(List.of(1, 2, 3));
1
2
2
内容未完......