集合的定义
集合是一个存放对象的引用的容器。位于 java.util
包下。
集合和数组的区别(重点)
- 数组和集合都是 Java 中的容器
- 数组的长度是固定的,集合的长度是可变的
- 数组只能存储相同数据类型的数据,这里的数据类型可以是基本数据类型,也可以是引用类型
- 集合可以存储不同数据类型的对象的引用(但一般情况下,我们会使用泛型来约定只使用1种数据类型),但不能存储基本数据类型
集合的分类
集合主要分为以下3种:
- List 集合
- Set 集合
- Map 集合
它们之间的继承关系如下
- Java 集合的根接口是
Collection
,它又继承了迭代接口Iterable
- Lis 接口和 Set 接口继承了
Collection
接口 - Map 接口是独立的接口,并没有继承 Collection 接口 (这里是重点,面试可能问的比较多)
List
接口常用的实现类有:ArrayList
、LinkedList
、Vector
Set
接口常用的实现类有:HashSet
、LinkedHashSet
、TreeSet
Map
接口常用的实现类有:HashMap
、HashTable
、TreeMap
List集合
List 集合包括 Lis t接口以及 List 接口的所有实现类。List 集合具有以下特点:
- 集合中的元素允许重复
- 集合中的元素是有顺序的,各元素插入的顺序就是各元素的顺序
- 集合中的元素可以通过索引来访问或者设置
List接口常用的实现类有:ArrayList
、LinkedList
、Vector
。它们的区别:
ArrayList
优点: 底层数据结构是数组,查询快,增删慢。
缺点: 线程不安全,效率高LinkedList
优点: 底层数据结构是链表,查询慢,增删快。
缺点: 线程不安全,效率高Vector
优点: 底层数据结构是数组,查询快,增删慢。
缺点: 线程安全,效率低
Set集合
Set 集合包括 Set 接口以及 Set 接口的所有实现类。Set集合具有以下特点:
- 集合中不包含重复元素(你可以重复添加,但只会保留第1个)
- 集合中的元素不一定有顺序
Set 接口常用的实现类有:HashSet
、LinkedHashSet
、TreeSet
。
HashSet
底层数据结构是哈希表。(无序,唯一)
如何来保证元素唯一性?- 依赖两个方法:
hashCode()
和equals()
- 依赖两个方法:
LinkedHashSet
底层数据结构是链表和哈希表。(FIFO插入有序,唯一)- 由链表保证元素有序
- 由哈希表保证元素唯一
TreeSet
底层数据结构是红黑树。(唯一,有序)- 如何保证元素排序的呢?
自然排序
比较器排序 - 如何保证元素唯一性的呢?
根据比较的返回值是否是 0 来决定
- 如何保证元素排序的呢?
Map集合
Map 集合包括 Map 接口以及 Map 接口的所有实现类。Map 集合具有以下特点:
- Map 接口并没有继承
Collection
接口,提供的是 key 到 value 的映射 - Map 中不能包含相同的 key
Map 接口常用的实现类有:HashMap
、HashTable
、TreeMap
。
TreeMap
是有序的,HashMap
和HashTable
是无序的。Hashtable
的方法是同步的,HashMap
的方法不是同步的。这是两者最主要的区别。
內容引用整理自: