本文快速回顾了Java中容器的知识点,用做面试复习,事半功倍。html
上篇:容器概览,容器中用到的设计模式,List源码java
中篇:Map源码git
下篇:Set源码,容器总结github
http://wiki.jikexueyuan.com/project/java-collection/hashset.html面试
https://segmentfault.com/a/1190000014391402算法
默认容量16,扩容两倍,加载因子0.75编程
容许元素为nullsegmentfault
实现Set接口设计模式
不保证迭代顺序缓存
非同步
初始容量很是影响迭代性能
public HashSet() {map = new HashMap<>();}
若是添加的是在 HashSet 中不存在的,则返回 true;若是添加的元素已经存在,返回 false。
对于 HashSet 中保存的对象,请注意正确重写其 equals 和 hashCode 方法,以保证放入的对象的惟一性。
HashSet 和 HashMap 的区别
重要:
HashMap中使用键对象来计算hashcode值
HashSet:
无序,容许为null,底层是HashMap(散列表+红黑树),非线程同步
TreeSet:
有序,不容许为null,底层是TreeMap(红黑树),非线程同步
LinkedHashSet:
WeakHashMap 的 Entry 继承自 WeakReference,被 WeakReference 关联的对象在下一次垃圾回收时会被回收。
WeakHashMap 主要用来实现缓存,经过使用 WeakHashMap 来引用缓存对象,由 JVM 对这部分缓存进行回收。
1private static class Entry<K,V> extends WeakReference<Object> implements Map.Entry<K,V> 2
Tomcat 中的 ConcurrentCache 使用了 WeakHashMap 来实现缓存功能。
ConcurrentCache 采起的是分代缓存:
1public final class ConcurrentCache<K, V> { 2 3 private final int size; 4 5 private final Map<K, V> eden; 6 7 private final Map<K, V> longterm; 8 9 public ConcurrentCache(int size) { 10 this.size = size; 11 this.eden = new ConcurrentHashMap<>(size); 12 this.longterm = new WeakHashMap<>(size); 13 } 14 15 public V get(K k) { 16 V v = this.eden.get(k); 17 if (v == null) { 18 v = this.longterm.get(k); 19 if (v != null) 20 this.eden.put(k, v); 21 } 22 return v; 23 } 24 25 public void put(K k, V v) { 26 if (this.eden.size() >= size) { 27 this.longterm.putAll(this.eden); 28 this.eden.clear(); 29 } 30 this.eden.put(k, v); 31 } 32}
Iterator替代了Enumeration,Enumeration是一个旧的迭代器了。
与Enumeration相比,Iterator更加安全,由于当一个集合正在被遍历的时候,它会阻止其它线程去修改集合。
区别有三点:
若是是单列的集合,咱们考虑用Collection下的子接口ArrayList和Set。
若是是映射,咱们就考虑使用Map
是否须要同步:去找线程安全的集合类使用
迭代时是否须要有序(插入顺序有序):去找Linked双向列表结构的
是否须要排序(天然顺序或者手动排序):去找Tree红黑树类型的(JDK1.8)
估算存放集合的数据量有多大,不管是List仍是Map,它们实现动态增加,都是有性能消耗的。在初始集合的时候给出一个合理的容量会减小动态增加时的消耗
使用泛型,避免在运行时出现ClassCastException
本人目前为后台开发工程师,主要关注Python爬虫,后台开发等相关技术。
Csdn
拥有专栏:Leetcode题解(Java/Python)、爬虫开发
知乎
https://www.zhihu.com/people/yang-zhen-dong-1/
拥有专栏:码农面试助攻手册
掘金
https://juejin.im/user/5b48015ce51d45191462ba55
简书
https://www.jianshu.com/u/b5f225ca2376