摘要:1. 何为 加载因子LoadFactor? LoadFactor 加载因子, 是表示Hash表中元素的填满的程度。 加载因子越大,填满的元素越多 好处:空间利用率高了 缺点:冲突的机会加大了. 加载因子越小,填满的元素越少 好处:冲突的机会减小了 缺点:空间浪费多了. 冲突的机会越大,则查找的成本越
阅读全文
摘要:总结 Segment的大小size默认为16 HashEntry大小的计算也是2的N次方(cap <<=1), cap的初始值为1,所以HashEntry最小的容量为2 细节 ConcurrentHashMap的初始化是会通过位与运算来初始化Segment的大小,用size来表示,如下所示 int
阅读全文
摘要:总结 1.线程安全性不同 HashMap线程不安全;(需要多线程操作的时候可以使用线程安全的ConcurrentHashMap。ConcurrentHashMap虽然也是线程安全的,但是它的效率比Hashtable要高好多倍。因为ConcurrentHashMap使用了分段锁,并不对整个数据进行锁定
阅读全文
摘要:总结 Collections.synchronizedXXX() 方法,可以包装成线程安全的容器。 这些方法的作用就是在原有容器的类的方法内部实现逻辑中加入了同步关键字syschronized.
阅读全文
摘要:总结 可以使用 Collections.unmodifiableCollection(Collection c) 方法来创建一个只读集合,这样改变集合的任何操作都会抛出 Java. lang. UnsupportedOperationException 异常。 简单来说就是返回一份map的只读视图,
阅读全文
摘要:总结 底层实现:都是数组,因此get(int index)都是O(1) 线程安全:Vector 的方法都是同步的,线程安全,方法上都有synchronized;ArrayList 非线程安全,但性能比Vector好 扩容机制:默认初始化容量都是10。Vector 扩容默认是原来的2倍,可指定扩容的大
阅读全文
摘要:总结 底层实现: ArrayList 基于动态数组实现的非线程安全的集合。默认大小为10; 当元素个数增加,数据无法存储时,系统会另外申请一个长度为当前长度的1.5倍的数组,然后把之前的数据拷贝到新建的数组中 Arrays.copyOf(objArr, objArr.length + 1) 在声明时
阅读全文
摘要:总结 HashSet实现了Set接口,是一个不能够存放重复元素的容器 内部直接使用HashMap实现,即底层使用数组存储数据(HashMap JDK1.8使用数组+链表+红黑树, HashSet只需要用到数组部分即可,因为保存的都是不相等元素,不存在hash冲突的情况) 线程不安全。如果想变成线程安
阅读全文
摘要:转载 1-TreeMap源码解析(全中文,全函数注释) 作者:孤芳不自賞 2-TreeMap核心源码实现解析 (红黑树的图解) 作者:kosamino
阅读全文
摘要:总结 JDK1.8 主要区别如下: 线程安全性不同。HashMap线程不安全;Hashtable 中的方法是Synchronize的。 key、value是否允许null。HashMap的key和value都是可以是null,key只允许一个null;Hashtable的key和value都不可为n
阅读全文
摘要:图表展示 最新图片,请点击LINK: https://www.processon.com/apps/58bd73cfe4b0f944a6660f38 参考 java集合详解 https://zhuanlan.zhihu.com/p/137999373 Java集合中List,Set以及Map等集合体
阅读全文
摘要:总结 Iterator 可以遍历 Set 和 List 集合,而 ListIterator 只能遍历 List。 Iterator 只能单向遍历,而 ListIterator 可以双向遍历(向前/后遍历)。 ListIterator 从 Iterator 接口继承,然后添加了一些额外的功能,比如添加
阅读全文
摘要:迭代器 Iterator 是什么? Java容器的顶部接口就是Iterator。是一个可以遍历集合的对象,为各种容器提供了公共的操作接口,隔离对容器的遍历操作和底层实现,从而解耦。 java迭代器查找的唯一操作就是依靠调用next,而在执行查找任务的同时,迭代器的位置也在改变. Iterator迭代
阅读全文
摘要:总结 标红(红色)的方法,是熟悉的且名字straight-forward的方法。这些方法在执行失败后,都会抛出异常。而其对应的标黑方法(黑色)并不会。 当使用一个有容量限制的队列时,或者容易触发执行失败的场景,推荐使用标黑方法。不会频繁抛出大量异常。 细节 java Queue中 add/offer
阅读全文
摘要:总结 优先队列的作用是能保证每次取出的元素都是队列中权值最小的(Java的优先队列每次取最小元素,C++的优先队列每次取最大元素)。这里牵涉到了大小关系,元素大小的评判可以通过元素本身的自然顺序(natural ordering),也可以通过构造时传入的比较器(Comparator,类似于C++的仿
阅读全文
摘要:作者:zhaoguhong(赵孤鸿) 出处:http://www.cnblogs.com/zhaoguhong/ 本文版权归作者和博客园共有,转载请注明出处 总结 如果只是获取key,或者value,推荐使用keySet或者values方式 如果同时需要key和value推荐使用entrySet 如
阅读全文
摘要:HashMap 底层实现:数组+链表+红黑树 在 JDK1.7 中,HashMap 是由 数组+链表构成的 在 JDK1.8 中,HashMap 是由 数组+链表+红黑树构成 详见link。 HashMap 重要的字段 Node<K,V>[] table 我们说 HashMap 是由数组+链表+红黑
阅读全文
摘要:总结 ref: https://blog.csdn.net/qq_32679815/article/details/78907437 1-ArrayList是实现了基于动态数组的数据结构,LinkedList是基于链表结构。 2-对于随机访问(在某个index)的get和set方法,ArrayLis
阅读全文