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:快速报错,容器的同步控制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值