您好,登录后才能下订单哦!
这篇文章主要介绍“JDK的Set源码分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JDK的Set源码分析”文章能帮助大家解决问题。
首先,我们看一下HashSet
private transient HashMap<E,Object> map;
// Dummy value to associate with an Object in the backing Map
private static final Object PRESENT = new Object();
可见,他适配了HashMap,那么他的功能是如何委托给HashMap结构的呢?
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
在hashMap中,我们大多数时候是用value,但是在set的时候,却很好的利用了已有类HashMap,他利用了HashMap的key的唯一性来保证存储在Set中的元素的唯一性;
private static final Object PRESENT = new Object();
是这个HashMap所有key的value,他只是一个形式,而我们真正的数据是存在在key中的资源;
我们最后拿到的迭代器也是:
public Iterator<E> iterator() {
return map.keySet().iterator();
}
map的keySet的迭代器;
同理,我们看看LinkedhashMap;
public LinkedHashSet(int initialCapacity, float loadFactor) {
super(initialCapacity, loadFactor, true);
}
/**
* Constructs a new, empty linked hash set with the specified initial
* capacity and the default load factor (0.75).
*
* @param initialCapacity the initial capacity of the LinkedHashSet
* @throws IllegalArgumentException if the initial capacity is less
* than zero
*/
public LinkedHashSet(int initialCapacity) {
super(initialCapacity, .75f, true);
}
/**
* Constructs a new, empty linked hash set with the default initial
* capacity (16) and load factor (0.75).
*/
public LinkedHashSet() {
super(16, .75f, true);
}
调用了父类的构造函数;构造函数如下:
HashSet(int initialCapacity, float loadFactor, boolean dummy) {
map = new LinkedHashMap<E,Object>(initialCapacity, loadFactor);
}
生出了LinkedHashMap;
同理,我们一样可见到treeMap的实现:
private transient NavigableMap<E,Object> m;
// Dummy value to associate with an Object in the backing Map
private static final Object PRESENT = new Object();
关于“JDK的Set源码分析”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注亿速云行业资讯频道,小编每天都会为大家更新不同的知识点。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。