集合Collection底层

集合:


1.ArrayList的实现原理: ArrayList实现List接口、底层使用数组保存所有元素,每次数组容量的增长大约是其原容量的1.5倍,数组进行扩容时,会将老数组中的元素重新拷贝一份到新的数组中,这种做法代价是很高的. Vector和ArrayList差不多,就是线程是安全的

原文:http://www.cnblogs.com/batys/archive/2011/11/02/2233597.html

2.LinkList原理:

LinkedList属于一个双向循环的链表,其内部是用一个Entry来维护的,Entry中就包含链表的三个属性,previous、next、element,相对于ArrayList来说,普遍认为对数据的修改频繁时最好使用 LinkedList,但是我们发现针对LinkedList要移除某个元素时,发现其效率也并不见得非常的高,因为其中还涉及到一个查询的操作

原文:http://blog.csdn.net/csh624366188/article/details/6896656

2.HashMap的实现原理:

HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。
当HashMap数组达到数组长度的0.75时,长度就会倍增
根据 put 方法的源代码可以看出,当程序试图将一个 key-value 对放入 HashMap 中时,程序首先根据该 key 的 hashCode() 返回值决定该 Entry 的存储位置:如果两个 Entry 的 key 的 hashCode() 返回值相同,那它们的存储位置相同。如果这两个 Entry 的 key 通过 equals 比较返回 true,新添加 Entry 的 value 将覆盖集合中原有 Entry 的 value,但 key 不会覆盖。如果这两个 Entry 的 key 通过 equals 比较返回 false,新添加的 Entry 将与集合中原有 Entry 形成 Entry 链,而且 新添加的 Entry 位于 Entry 链的头部 ——具体说明继续看 addEntry() 方法的说明。 ( 两个图,后图是补充的,更清晰直观


3.HashSet的实现:
LinkedHashSet(); //保持元素的添加顺序
HashSet();//自动排序,与添加顺序无关
对于 HashSet 而言,它是基于 HashMap 实现的,HashSet 底层采用 HashMap 来保存所有元素,但不可重复
HashSet 的实现其实非常简单,它只是封装了一个 HashMap 对象来存储所有的集合元素,所有放入 HashSet 中的集合元素实际上由 HashMap 的 key 来保存,而 HashMap 的 value 则存储了一个 PRESENT,它是一个静态的 Object 对象。 
  1. // 将指定元素放入 HashSet 中,也就是将该元素作为 key 放入 HashMap
  2. //当然key不能重复,所以hashset不能添加重复值
  3. public boolean add(E e)
  4. {
  5. return map.put(e, PRESENT) == null;


转载自:http://blog.sina.com.cn/s/blog_9eaf28f90101hl9f.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值