码迷,mamicode.com
首页 > 其他好文 > 详细

Set的源码分析

时间:2018-12-18 13:11:56      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:his   code   特点   object   normal   怎么   dha   lin   分析   

Set的内部实现其实是一个Map。即HashSet的内部实现是一个HashMap,TreeSet的内部实现是一个TreeMap,LinkedHashSet的内部实现是一个LinkedHashMap。

public HashSet() {
  map = new HashMap<>();
}
HashSet(
int initialCapacity, float loadFactor, boolean dummy) {   map = new LinkedHashMap<>(initialCapacity, loadFactor); }
public TreeSet() {
  this(new TreeMap<E,Object>()); }
public LinkedHashSet() {
  super(16, .75f, true);
}

但是,存到Set中只有一个元素,又是怎么变成(key,value)的呢?

以HashSet为例

private static final Object PRESENT = new Object();
public boolean add(E e) {
    return map.put(e, PRESENT)==null;
}
public Iterator<E> iterator() {
    return map.keySet().iterator();
}

原来是,把添加到Set中的元素作为内部实现mapkey,然后用一个常量对象PRESENT对象,作为value

这是因为Set的元素不可重复和Mapkey不可重复有相同特点。Map有一个方法keySet()可以返回所有key

public HashSet() {

        map = new HashMap<>();

}

    HashSet(intinitialCapacity, floatloadFactor, booleandummy) {

        map = new LinkedHashMap<>(initialCapacity, loadFactor);

    }

Set的源码分析

标签:his   code   特点   object   normal   怎么   dha   lin   分析   

原文地址:https://www.cnblogs.com/duoduotouhenying/p/10136385.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!