集合类之Collection接口和Map接口

时间:2022-09-03 00:05:01

先上图:

  集合类之Collection接口和Map接口

一、自己了解

  Java的集合类主要有List、Set和Map三大类,其中,List和Set是Collection接口一脉,Map接口自成一脉。

  其中,还有两个工具类Arrays和Collections

二、学习了解

  1.List

    List的特性是按顺序插入,可重复,允许null值。实现List接口的集合主要有:ArrayList,LinkedList,Vector和Stack。

    简单地讲一下:

    ArrayList是动态数组,底层是数组,默认初始化大小是10,可以动态扩容1.5倍,线程不安全。适用于随机访问。

    LinkedList底层是双向链表,线程不安全。由于是双向链表,访问时需要从头部或者尾部进行遍历,适用于插入删除比较多的操作

    Vector底层也是数组,类似于ArrayList,但是它是线程安全的。

    Stack是继承Vector类的,实现了一个先进后出的栈结构,其中Stack提供了额外的5个方法。基本的push和pop操作,以及peek操作,empty方法判断栈空,search方法检测一个元素在栈中的位置。Stack刚创建后是一个空栈。

  2.Set

    Set的特性是无序,不可重复,允许null值但只允许一个。实现Set接口的集合主要有HashSet、TreeSet、EnumSet

    HashSet底层是用HashMap实现的,用哈希表实现的(数组+链表)

    TreeSet底层是用TreeMap实现的,用的是红黑树实现的。

  3.Map

    上面讲的Collection叫做集合,Map叫做映射。如下图:

    集合类之Collection接口和Map接口图来源Java3y

    Map集合的特点:将键映射到值得对象,一个映射不能包含重复的键,每个键最多只能映射一个值。

    Map与Collection的区别在于Map是以键值成对存储的,键是唯一的,值是可以重复的;Collection集合存在元素是单独的,其中Set是唯一的,List是可重复的。

    要点在于Map针对键,Collection针对值。

三、 深入了解(基于JDK1.8)

1.LinkedList ArrayList Vector的区别

  

区别之处

ArrayList

LinkedList

Vector

底层实现

基于动态数组

基于双向链表

基于动态数组

初始容量

10

 

10

扩容大小

增长原数组大小的50%

 

增长原数组大小的100%

是否线程安全

不安全

不安全

安全

各自优点

适用随机访问,查询效率比LinkedList和Vector高

插入速度快,适用于插入和删除较多的操作。

查询效率比ArrayList低,适用于数据量较大的数据

2.HashMap HashTable ConcurrentHashMap的区别

  

区别

HashMap

HashTable

ConcurrentHashMap

TreeMap

底层实现

数组+链表+红黑树

数组+链表

JDK1.7 ReentrantLock+Segment+HashEntry

JDK1.8

Synchronized+CAS+Node+红黑树

 

红黑树

初始容量

16(2的n次幂)

11

16

 

负载因子

0.75

0.75

0.75

 

扩容大小

原大小的2倍

原大小的2倍+1

原来的2倍

 

是否线程安全

不安全

安全

安全

不安全

各自特点

HashMap可以将空值作为一个表的条目的key或value

 已经过时

ConcurrentHashMap的key和Value都不能为null

 TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使用TreeMap

3.HashSet与HashMap   TreeSet与TreeMap的关系

   HashSet依赖HashMap

  集合类之Collection接口和Map接口

   TreeSet依赖TreeMap

  集合类之Collection接口和Map接口