集合List Map和Set详解

List

List是一个有序,可以存放相同数据集合。
其中的子类:

ArrayList:

底层结构是数组,所以查询速度比较快,增删比较慢,线程是不安全的。

LinkedList:

底层结构是双向链表,所以增删快,查询慢,线程安全。

Vector:

底层与ArrayList一样,线程是安全的,但是因为效率较慢,已经很少使用了。

Set

Set是一个无序集合,其中存放的数据是不可重复的。
其中的子类:

HashSet:

线程不安全,无序标识唯一,HashSet底层其实基于HashMap实现的,通过HashMap保存数据

TreeSet:

底层是红黑树数据结构,也就说是一棵自平衡的排序二叉树,这样就可以保证当需要快速检索指定节点。
TreeSet 底层实际使用的存储容器就是 TreeMap,底层的方法基本是靠TreeMap实现。

Map

Map 是一个无序集合,以键值对的方式存放数据,键对象不允许重复,值对象可以重复。
其中的子类:

HashMap:

在JDK7以前 底层是数组加链表实现,到了JDK8,引入了红黑树,我们当链表的长度大于8个时,开始转变红黑树而当红黑树的节点个数小于6个(默认值)以后,又开始使用链表。所以在JDK8以后放弃了头插法,继而使用尾插法,我们在进行尾插法的时候,还能够遍历一遍size(),来判断要不要进行树的转变。

数据存放在键值对 Entry中,JDK8以后被称为node

HashMap可以存null键和null值,不保证元素的顺序恒久不变,它的底层使用的是数组和链表,通过hashCode()方法和equals方法保证键的唯一性

通过拉链法解决Hash冲突

实现不同步 线程不安全、

TreeMap:

底层是红黑树
TreeMap实现SortMap接口,能够把它保存的记录根据键排序,
默认是按键值的升序排序,也可以指定排序的比较器,
当用Iterator遍 历TreeMap时,得到的记录是排过序的。

LinkedHashMap:

通过维护一个运行于所有条目的双向链表,保证了集合元素迭代的顺序,这个顺序可以是插入顺序或者访问顺序.

可以认为是HashMap+LinkedList,也就是说,它使用HashMap操作数据结构,也用LinkedList维护插入元素的先后顺序.

key和value都允许为空
key重复会覆盖,value可以重复
有序的
LinkedHashMap是非线程安全的

猜你喜欢

转载自blog.csdn.net/NuanShuTT/article/details/108163943
今日推荐