1.集合概述
- 集合主要为了保存数量不确定的数组以及具有映射关系的数据(关联数组)。
- 集合类主要为了保存、盛装其他数据,因此也被称为容器类。位于Java.util包下。
- 集合类和数组不一样,数组元素既可以是基本类型的值,也可以是对象(实际上保存的是对象的引用变量),而集合里只能保存对象(实际上只是保存对象的引用变量,但通常习惯上认为集合里保存的是对象)。
- Java 集合类型分为 Collection 和 Map,它们是 Java 集合的根接口,这两个接口又包含了一些子接口或实现类。
Collection接口基本结构(黄色为接口,蓝色为实现类)
Map接口基本结构
集合接口及其作用:
集合实现类及其作用:
2.Collection接口
- Collection是List、Set和Queue的父接口,通常情况下不被直接使用。
- Collection接口定义了一些通用的方法,可以实现对集合的基本操作(Set,List和Queue)
Collection接口常用方法如下:
3.List集合(ArrayList与LinkedList)
- List为有序可重复集合,集合中每个元素都有其对应的顺序索引。
- List集合默认按元素添加顺序设置元素的索引(第一个为0,第二个为1...)
- List实现Collection接口,主要有两个常用实现类:ArrayList与LinkedList
1-ArrayList类
ArrayList类实现了可变数组的大小,此外还提供了快速基于索引访问元素的方式,对尾部成员的增加和删除支持较好。
向ArrayList中插入删除元素速度较慢。
构造方式
- ArrayList():构造一个初始容量为 10 的空列表。
- ArrayList(Collection<?extends E>c):构造一个包含指定 Collection 元素的列表,这些元素是按照该 Collection 的迭代器返回它们的顺序排列的。
常用方法
除Collection接口方法外还包括:
2-LinkedList类
LinkedList类采用链表接口保存对象,便于向集合中插入或者删除元素。插入删除元素效率高,但随机访问元素速度较慢(特定索引)。
构造方式同ArrayList,有两种
常用方法:
3-ArrayList与LinkedList区别
相同:
ArrayList与LinkedList都是List接口的实现类,都实现了List的所有未实现的方法
不同:
- ArrayList基于动态数组数据结构的实现,访问速度优于LinkedList
- LinkedList基于链表数据结构的实现,占用内存空间较大,但在批量插入删除时优于ArrayList
4.Set集合(HashSet与TreeSet)
set实现collection接口,Set集合中的对象不按特定顺序排序且不能包含重复对象(只能有一个null)
1-HashSet
特点:
- HashSet按照HashSet算法存储集合中的元素,有很好的存取查找性能。
- 不能保证元素的排列顺序
- HashSet非同步,若多个线程需同时访问或修改一个HashSet需通过代码保证其同步。
- 集合元素值可以为null(只能有一个)
存取流程:
向HashSet集合存入一个元素时,HashSet会调用该对象的hashCode()方法来取得到该对象的hashCode值,然后根据该hashCode值决定该对象在HashSet中的存储位置。
若有两个元素通过equals()方法比较返回的结果为true,但它们的hashCode不相等,HashSet会将他们存储于不同位置,依然可以添加成功。(Set中存的是引用而非值)
构造方法:
- HashSet():构造一个新的空的 Set 集合。
- HashSet(Collection<? extends E>c):构造一个包含指定 Collection 集合元素的新 Set 集合。其中,“< >”中的 extends 表示 HashSet 的父类,即指明该 Set 集合中存放的集合元素类型。c 表示其中的元素将被存放在此 Set 集合中。
2-TreeSet
TreeSet同时实现了Set与SortSet接口(SortSet为Set的子接口,可以实现对集合进行自然排序),因此使用TreeSet类实现Set接口默认情况下是自然排序的(升序)。
2) TreeSet只能对实现了Comparable接口的类进行排序(Comparable接口有一个compareTo(Object o)方法用于比较两个对象的大小)。