概要
主要针对collection和Map这两个接口进行展开
Collection 接口的接口 对象的集合(单列集合)
├——-List 接口:元素按进入先后有序保存,可重复
│—————-├ LinkedList 接口实现类, 链表, 插入删除, 没有同步, 线程不安全
│—————-├ ArrayList 接口实现类, 数组, 随机访问, 没有同步, 线程不安全
└——-Set 接口: 仅接收一次,不可重复,并做内部排序
├—————-└HashSet 使用hash表(数组)存储元素
│————————└ LinkedHashSet 链表维护元素的插入次序
└ —————-TreeSet 底层实现为二叉树,元素排好序
Map 接口 键值对的集合 (双列集合)
├———Hashtable 接口实现类, 同步, 线程安全
├———HashMap 接口实现类 ,没有同步, 线程不安全-
├ ——–TreeMap 红黑树对所有的key进行排序
集合实现类的特点
List接口实现类特性:
ArrayList:单例集合,底层是Object数组组成的,所以集合中的每个数据都是有索引的,就体现出查询快的特性。排列都是有序的。
LinkedList:单例集合,底层是通过双向链表组成的,所以不具备索引,查询数据的时候都是需要从头部或者尾部通过指针移动来寻找的,查询相对于ArrayList慢些。但是添加和删除快,因为在删除或者添加的时候,只需要删除或者添加指针即可。排列是有序的。
Set实现类特性:
hashSet:单列集合,底层的数据结构是通过哈希表排列的,所以集合中的元素是无序的,也是唯一的,因为在储存元素的时候,需要计算出该元素的hash值,然后通过hash值去寻找指定位置,如果该位置上有数据,则比较两个元素是否相同,相同不添加,不相同则通过链表的形式挂在该元素下方。其实hashset就是一个hashMap的实例,在key出存储元素,计算出元素的hashcode的值进行存储。jdk8以后每个元素位置上的列表超过8个之后就会变为红黑树进行存储。
TreeSet:特点是有序但是不重复,有序是因为底层重写了比较器,如果是对象,可以实现Comparable重写Comparator方法,对对象进行进行排序即可。其实TreeSet就是创建了一个TreeMap的实例,value可以为空,但是key不为空
LinkedHashSet :底层是通过数组和双向链表的形式存储的,是hashSet的子类,元素是不重复的
Map实现类的特征:
hashMap:双列集合,组成是key-value的形式存储的,key是唯一的,value的值可以重复。jdk8之后,底层数据结构为数组+链表+红黑树。添加元素时key相同则覆盖,不相同则通过链表悬挂,链表的长度达到8之后,就会将链表编程红黑树的形式。
小结
凡是有Tree的集合,都是有序的,凡是有Set的就是不重复的