`
taogebx
  • 浏览: 32626 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

集合初探--认识Set

阅读更多
1. HashSet


·基于HashMap实现的,HashSet底层使用HashMap来保存所有元素,因此HashSet 的实现比较简单,相关HashSet的操作,基本上都是直接调用底层HashMap的相关方法来完成。

public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io.Serializable {
    static final long serialVersionUID = -5024744406713321676L;

    // 底层使用HashMap来保存HashSet中所有元素。
    private transient HashMap<E,Object> map;
    
    // 定义一个虚拟的Object对象作为HashMap的value,将此对象定义为static final。
    private static final Object PRESENT = new Object();

    public HashSet() {
         map = new HashMap<E,Object>();
    }

    public Iterator<E> iterator() {
         return map.keySet().iterator();
    }

    public int size() {
         return map.size();
    }

    public boolean isEmpty() {
         return map.isEmpty();
    }

    public boolean add(E e) {
         return map.put(e, PRESENT)==null;
    }
}

·HashMap中value的生成:系统构造一个static final的Object对象作为HashMap的value。
·存放的元素就是HashMap的keySet--不允许重复,无序,允许null;随机存取。


2.LinkedHashSet



·LinkedHashSet底层使用LinkedHashMap来保存所有元素,它继承与HashSet,其所有的方法操作与HashSet相同。
·仅仅提供了四个构造方法,并通过传递一个标识参数(作用仅仅是为了重载方法),调用父类的构造器构造一个LinkedHashMap来实现。
HashSet(int initialCapacity, float loadFactor, boolean dummy) {
    map = new LinkedHashMap<E,Object>(initialCapacity, loadFactor);
}

  • 大小: 11.5 KB
  • 大小: 36.5 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics