java夯实基础系列:集合

时间:2021-10-02 17:56:34

容器

一.引入

为什么需要集合?
数组存在两个缺陷:
数组长度难以扩充
数组中元素类型必须相同
容器可以弥补数组的这两个缺陷

二.集合体系

Java的所有的集合体系都是实现了Collection接口,所有通用的 Collection 实现类(通常通过它的一个子接口间接实现 Collection)应该提供两个“标准”构造方法:一个是 void(无参数)构造方法,用于创建空 collection;另一个是带有 Collection 类型单参数的构造方法,用于创建一个具有与其参数相同元素新的 collection。add方法的参数类型是Object,以便于利用多态特性接收任意类型的对象,集合中存储的都是对象的引用(地址)。在Collection下又分三个子体系: List、Set、Map体系。

java夯实基础系列:集合

三.Collection接口

1.最共性的方法:即Collection接口中的方法

java夯实基础系列:集合

分类说明:

添加:
add()
addAll()

删除:
remove()
removeAll()

判断:
contains()
containsAll()

获取:
iterator()
size()

集合变数组:
toArray()

2.Iterator迭代器

四.List(有序、可重复)

1.ArrayList

使用的数据结构是数组,线程是不安全的,查找速度快,增删速度慢

因为List继承了Collection接口,ArrayList又实现了List接口,因此ArrayList具备Collection、List中的所有方法,只有它自己个性的方法,请查API文档。

使用的数据结构是链表,线程不安全的,查找速度慢,增删速度快

因为List继承了Collection接口,LinkList又实现了List接口,因此LinkList具备Collection、List中的所有方法,只有它自己个性的方法,请查API文档。

3.Vector

使用的数据结构是数组,线程安全的,查找速度快,增删速度慢,被ArrayList替代了

因为List继承了Collection接口,Vector又实现了List接口,因此Vector具备Collection、List中的所有方法,只有它自己个性的方法,请查API文档。

五.Set(无序、不可重复)

重复不重复指的是相同的对象
重复叫做:可以添加相同的对象,就是equal方法返回值一样

1.HashSet

数据结构是哈希表,线程是非同步的。保证元素唯一性的原理:判断元素的hashcode值是否相同。如果相同,还会继续判断元素的equals方法,是否为true。

可以根据自己的目的去重写这两个方法。

因为Set继承了Collection接口,HashSet又实现了Set接口,因此HashSet具备Collection、Set中的所有方法,只有它自己个性的方法,请查API文档。

2.TreeSet

底层数据结构是二叉树,保证元素的唯一性依据是:compareTo方法return 0.

TreeSet排序的第一种方式:让元素自身具备比较性,元素需要实现Comparable接口,覆盖compareTo方法。

TreeSet的第二种排序方式:当元素自身不具备比较性时,或者具备的比较性不是所需要的,这时就需要让集合自身具备比较性。

因为Set继承了Collection接口,TreeSet又实现了Set接口,因此TreeSet具备Collection、Set中的所有方法,只有它自己个性的方法,请查API文档。

六.Map

Map存储的是键值对,一对一的存,键不能重复。

1.HashMap

底层使用的数据结构是哈希表,线程不安全的,可以存储null键,null值

HashMap保证键唯一性的原理和HashSet一样

出现相同的键,会把以前的覆盖掉,而不是删除掉

如果你单独只是存键值对的话,没有其他功能,用hashmap就可以了。
但是你想排序的话,用treemap

2.TreeMap

底层使用的数据结构是二叉树,线程不安全的。

排序的原理和TreeSet一样(方法也是几乎完全一样的)
是通过键来排序的

七.两个工具类:Arrays、Collection

Arrays

此类包含用来操作数组(比如排序和搜索)的各种方法。此类还包含了一个允许将数组作为列表来查看的静态工厂。除非特别注明,否则如果指定数组引用为null,则此类中的方法都会抛出NullPointException。

Collections(集合的工具类)

Collection接口的实现类,如ArrayList、LinkedList本身并没有提供排序,倒置,查找等方法,这些方法是由Collections类来实现的,该类有很多public static方法,可以直接对Collection接口的实现类进行操作。