Collection:

ArrayList:
1:底层实现是数组,默认长度是10.
2:add(),判断是否数组越界,是数组扩容为原来的两倍。
3:remove(),copy数组,size-1,释放空虚的空间。

HashSet:
底层实现是一个HashMap,把值存在map的key上,value存的是一个object对象,就是说底层的HashMap中value都是一样的。
HashSet是无序的,不允许重复。

LinkedHashSet:
基础自HashSet,底层实现是一个LinkedHashMap,通过equals()方法比较两个对象是否相等,初始容量16,加载因子0.75f.
使用链表维护数据的顺序,所有说是有序,不重复的,对象都是存在底层map的key上,所有允许有且只有一个对象为null。

LinkedList:
1.LinkedList基于链表实现
2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
4.查找操作indexOf,lastIndexOf,contains等,两者差不多。

Map:

HashMap:
初始容量值:10,加载因子0.75f.
put()第一个对象的时候,进行初始化,容量12。
其底层是一个Entry数组,根据hash值,算法决定object val 对象存在Entry数组的位置。
注意点在用Iterator进行遍历map的时候,在遍历过程中不能调用remove()方法,否则会报错。
java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(HashMap.java:922)
at java.util.HashMap$EntryIterator.next(HashMap.java:962)
at java.util.HashMap$EntryIterator.next(HashMap.java:960)

原因:
在获得hashmap的迭代器的时候,构造器中会把expectedModCount = modCount;modCount:(记录map增加,删除,modCount+1)
在迭代过程中如何调用remove() or add()方法,modCont+1,在iterator.next()的时候会去比较expectedModCount与modCont是否相等,不等,报错。

源码:

LinkedHashMap:
初始容量16,加载因子0.75f.
一个有序的map。继承HashMap,LinkedHashMap并未重写父类HashMap的put方法,而是重写了父类HashMap的put方法调用的子方法void addEntry(int hash, K key, V value, int bucketIndex) 和void createEntry(int hash, K key, V value, int bucketIndex),提供了自己特有的双向链接列表的实现。

最新文章

  1. Android N开发 你需要知道的一切
  2. 用Kotlin语言重新编写Plaid APP:经验教训(II)
  3. 关于sql中in 和 exists 的效率问题,in真的效率低吗
  4. js中Window 对象及其的方法
  5. Java学习——HashMap
  6. Xcopy命令参数
  7. JAVA生成TXT日志文件
  8. 2014---多校训练2(ZCC Loves Codefires)
  9. WPF 之 设置Dialog的父窗体
  10. hadoop-2.0.0-mr1-cdh4.2.0源码编译总结
  11. shell中的替换
  12. 命令行方式运行yii2程序
  13. 1.1.3-学习Opencv与MFC混合编程之---画图工具 通过对话框进行工具的参数设置 画曲线 绘图校正
  14. 通过CSS实现各种方向的三角形
  15. Xposed 初尝
  16. 例10-12 *uva1637(概率dp)
  17. Flip String to Monotone Increasing LT926
  18. Vue——显示微信用户名称中enjoin表情
  19. Python爬虫设置Headers
  20. oggMonitor是什么

热门文章

  1. UVA2636
  2. jquery-简单拖拽代码
  3. 精简的网站reset 和 css通用样式库
  4. servlet 之request
  5. C++代码重构——从C global到C++ template
  6. java学习笔记
  7. java学习第一天 回顾以前
  8. nodeJS搭建本地服务器
  9. cacti添加主机监控
  10. 【leetcode】Search for a Range