java各常用容器总结

 

 阅读完java编程思想关于容器的介绍后,仅列出个人总结,欢迎纠正

 LinkedList:链表,底层定义了一个静态的内部类Node作为元素。空间复制度较小,增删改效率高,查找比较慢。

ArrayList: 底层采用数组实现,因此对他的操作应该尽量避免增删操作,查询速度快。


HashSet: 该容器实际就是一个HashMap,只不过HashMap中的Value被置为同一个无意元素。正因为对他的所有操作实际都是对HashMap的key进行操作,那么HashSet中没有重复元素的特点就容易理解了(因为Key不允许重复)


LinkedHashSet:在HashMap中,对Entry的编写做了一些改变,使其变成了累死链表的描述,因此可以做到插入有序,但是对于插入操作,LinkedHashSet比HashSet代价高,这是由于维护链表所带来的额外开销。


TreeSet: 保证所有元素有序。底层实际是TreeMap


HashMap:HashMap继承自AbstractMap,实现了Map接口。在内部定义了一个Entry内部类与一个Entry的数组,根据hash方法计算key的hash值(源码实际调用了Object类的hashcode方法并加以处理),根据hash值决定key插入的数组位置,如果key2得出相同的hash值,使用equal方法,若相同则覆盖value,若不同,则在数组位置上将新的entry2覆盖原来的entry1,并让entry2.next=entry1。 

 容量,负载因子(默认0.75),当前数组中元素>容量*负载因子,进行扩充,并重新进行hash运算,因此扩容开销很大。


LinkerHashmap 继承HashMap,在Entry中添加了before和after2个“指针”,以实现插入有序。



TreeMap:底层采用红黑树数据结构和一个比较器。具体实现较复杂,可以实现有序。若不考虑有序不建议使用,可以直接使用HashMap。


fail-fast:快速报错,容器的同步控制。

你可能感兴趣的:(java各常用容器总结)