java集合框架:

来源:互联网 发布:客户特殊要求矩阵图 编辑:程序博客网 时间:2024/06/07 05:25

从自己的认识中,总结下java集合框架:
1、Set:
对于HashSet 而言,它是基于HashMap实现的,HashSet底层采用HashMap来保存所有元素,因此HashSet的实现比较简单。
底层方式:在存放一个元素时,定义一个虚拟的object对象作为HashMap的Value。每个往HashSet中存放时实质上是

map.put<e,present>

对于:TreeSet:实现了sortedSet 接口的一个具体类。
底层实现:同样是利用HashMap来实现的,不过可以利用指定的比较器来实现排序,它是sortedSet接口的一个具体类。
2、线性表:
List:是collection的一个子接口,有ArrayList和LinkedList二者都为List的具体实现类。ListIterator,可以实现向前和向后的遍历。
ArrayList底层实现:用数组存储元素,这个数组是动态创建的,如果元素个数超过了数组的容量,就创建一个更大的数组,并将当前数组的元素复制到新数组中。
LinkedList在一个链表中存储元素。
3、Vector(向量集):Vector是线程安全的,ArrayList是线程不安全的。但是ArrayList比用Vector效率高。
4、stack,可以用ArrayList<>和数组实现。
5、图:Map
HashMap:底层实现是通过初始化一个Entry数组来实现key,Value的保存,向HashMap中添加值得步骤:
(1)、对key的hashCode进行hash计算,获取应该保存到数组中的index
(2)、判断index所有指向的数组元素是否为空,如果为空则直接插入。
(3)、若果不为空,则依次查找entry中的next所指定的元素,判断key是否相等,如果相等则替换久的值,返回。
(4)、如果都不想等,则将比链表元素赋值给待插入entry的next变量,然后将带插入元素插入到entry数组中去。
HashMap扩容,当超过数组大小 * locadFactor时,就进行数组扩容,loadFactor的默认值为0.75.数组大小默认为16,不够时自动翻倍。
put方法的实现原理:
当程序试图将一个key-value 对放入hashMap中时,程序首先根据该key的hashCode()返回值决定该Entry的存储位置:如果两个Entry的key的HashCode()返回值相同,那么它们存储的位置相同。如果这两个entry的key通过equals比较返回true,新添加的entry的value将覆盖集合中原有entry的value,但key不会覆盖。如果这两个Entry的key通过equals比较返回的fans,新添加的Entry将与集合中原有Entry形成entry链。

1 0
原创粉丝点击