java集合类
1.Iterable接口
定义了迭代集合的迭代方法
2. Collection接口
定义了集合添加的通用方法
3.List接口
元素被添加到集合中以后,取出的时候是按照放入顺序。
List可以重复。
存在下标,可以直接依靠下标取值
3.1 ArrayList类
底层是一个Object数组,初始容量为10,当数组容量不够是自动扩容为以前的1.5倍,线程不安全
3.2.Vector类(不常用)
底层是一个Object数组
初始容量为10,数组容量不够的时候自动扩容为原来的一倍,线程安全
3.3 LinkedList
底层是一个列表
实现的思想可以归结为:每一次的插入或者移除,都是通过node()方法获取指定的Node节点,然后通过linkBefore或者linkLast这些方法来具体进行链表的操作
4.Set接口
插入无序
元素不能重复
底层均为Map集合实现
4.1 TreeSet类
实现了AbstractSet拥有了Set的属性和方法
实现了NavigableSet,支持一系列导航方法,可以进行精确查找
进行了排序。(在HashMap原理进行分析)
4.2 HashSet类
底层基于HashMap无序
不可重复
4.3 LinkedHashSet类
底层基于LinkedHashMap实现,通过LinkedHashMap中的方法实现了顺序存值。
5. Map类
键值对的形式存放数据
定义了通用的方法
不可重复
5.1Entry类
Map类的内部类,用来获取所有的键值
5.2HashMap类
put的时候,会通过hash算法,计算一个index,这个index就是节点数组的下标,此时这个实体就被存储到这个数组中。但是由于这个hash算法不能保证任何一个key值计算出来的hash值均相同,所以采用链表的方式,挂载相同的index的实体。在1.8以后,当链表的节点数量大于或者等于8的时候且数组的容量大于64的时候,就会将链表转换为红黑树
底层实现:数组+链表或者红黑树