美文网首页
java集合——Set

java集合——Set

作者: spiritTalk | 来源:发表于2016-04-16 16:56 被阅读71次

    Set接口无序(意味着不能通过下标读取),并且不允许重复元素。与Set接口相关的部分UML类图如下:

    其主要实现类为:HashSet、LinkedHashSet、TreeSet。

    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();
    

    1、HashSet内部使用HashMap,HashSet集合内部所有的操作基本上都是基于HashMap实现的,所以HashSet中的元素是无序的。
    2、HashSet中的元素作为HashMap的 key,value就是这个 PRESENT 。

    LinkedHashSet

    1、LinkedHashSet继自HashSet,其构造时调用HashSet的构造方法,但是内部却是用的LinkedHashMap。

        public LinkedHashSet(int initialCapacity, float loadFactor) {
            super(initialCapacity, loadFactor, true);
        }
    
        HashSet(int initialCapacity, float loadFactor, boolean dummy) {
            map = new LinkedHashMap<>(initialCapacity, loadFactor);
        }
    

    2、它跟HashSet一样,把value做为一个dummy的object,然后结合key元素,放入LinkedHashMap里。

    TreeSet

    1、TreeSet实现的是NavigableSet接口,但NavigableSet接口继承自SortedSet接口,SortedSet接口继承自Set接口。
    2、TreeSet虽然使用的是NavigableMap,但无参构造函数里,NavigableMap便是TreeMap。

    private transient NavigableMap<E, Object> backingMap;
    
    public TreeSet() {
        backingMap = new TreeMap<E, Object>();
    }
    

    相关文章

      网友评论

          本文标题:java集合——Set

          本文链接:https://www.haomeiwen.com/subject/wofolttx.html