# 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

在创建集合的时候,可以通过 <类型> 泛型指定集合中元素的类型,关于泛型,后面在进阶篇再讲解。

指定泛型后,后面在获取集合中元素的时候,获取的数据就是泛型指定的类型;如果不指定泛型,那么元素在取出的时候是Object类型,那么赋值给指定类型的变量就需要强制转换,后面获取元素的时候再讲。


还可以在创建的时候,指定List初始化的大小,在使用的时候,如果元素超过了初始容量,会自动进行扩容。

如果知道列表中要放多少数据,建议在新建数组的时候指定列表大初始大小,这样避免扩容,从而耗费性能,因为列表的底层还是使用数组实现的,默认长度是10,而数组是无法动态修改大小的,所以在扩容的时候会创建一个新的列表,将之前列表中的数据拷贝到新列表中。

// 创建一个初始容量为5的ArrayList,用于存储Integer类型的元素  
List<Integer> list = new ArrayList<>(5);  
1
2

还可以创建不可变的List,不可变的List不能添加、修改、删除元素,只能读取元素,否则会报错:

List<String> colorList = List.of("red", "green", "blue");
System.out.println(colorList);    // [red, green, blue]
1
2

如果想快速创建包含元素的可变 List,可以使用如下方式:

// 将List.of(1, 2, 3)作为参数创建一个新的可变List
List<Integer> numbers = new ArrayList<>(List.of(1, 2, 3));	
1
2
内容未完......