Java API——容器(四)Set

容器(四)Set

public interface Set<E> 
    extends Collection<E> {
    ...
}

HashSet

属于抽象数据结构,通过 HashMap 实现。

继承关系

public class HashSet<E>
    extends AbstractSet<E>
    implements Set<E>, Cloneable, java.io.Serializable {
    ...
}

底层数据结构

    private static final Object PRESENT = new Object();  // 伪值,填充 Map 的 value        private transient HashMap<E,Object> map;  // 底层 HashMap

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

    public HashSet(int initialCapacity) {
        map = new HashMap<>(initialCapacity);
    }

    public HashSet(int initialCapacity, float loadFactor) {
        map = new HashMap<>(initialCapacity, loadFactor);
    }

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

操作-增删改查遍历

  • 增 改
    public boolean add(E e) {
        return map.put(e, PRESENT)==null;
    }
    public boolean remove(Object o) {
        return map.remove(o)==PRESENT;
    }
    public boolean contains(Object o) {
        return map.containsKey(o);
    }
  • 遍历
    public Iterator<E> iterator() {
        return map.keySet().iterator();
    }

其他

  • 容量、线程安全、及其他特征同 HashMap 。

LinkedHashSet

属于抽象数据结构,通过继承 HashSet 由 LinkedHashMap 实现。

继承关系

public class LinkedHashSet<E>
    extends HashSet<E>
    implements Set<E>, Cloneable, java.io.Serializable {
    ...
}

底层数据结构

    public LinkedHashSet() {
        super(16, .75f, true);
    }

    public LinkedHashSet(int initialCapacity) {
        super(initialCapacity, .75f, true);
    }

    public LinkedHashSet(int initialCapacity, float loadFactor) {
        super(initialCapacity, loadFactor, true);
    }

    public LinkedHashSet(Collection<? extends E> c) {
        super(Math.max(2*c.size(), 11), .75f, true);
        addAll(c);
    }

操作-增删改查遍历

  • 最终由 LinkedHashMap 来实现增删查改。

其他

  • 容量、线程安全、及其他特征同 LinkedHashMap 。

TreeSet

属于抽象数据结构,由 TreeMap 实现。

继承关系

public class TreeSet<E>
    extends AbstractSet<E>
    implements NavigableSet<E>, Cloneable, java.io.Serializable {
    ...
}

底层数据结构

    private static final Object PRESENT = new Object();  // 伪值,用于填充 Map 的 value
    private transient NavigableMap<E,Object> m;

    public TreeSet() {
        this(new TreeMap<E,Object>());
    }

    public TreeSet(Collection<? extends E> c) {
        this();
        addAll(c);
    }

    public TreeSet(Comparator<? super E> comparator) {
        this(new TreeMap<>(comparator));
    }

    TreeSet(NavigableMap<E,Object> m) {
        this.m = m;
    }

    public TreeSet(SortedSet<E> s) {
        this(s.comparator());
        addAll(s);
    }

操作-增删改查遍历

  • 最终由 TreeMap 来实现增删查改。

其他

  • 容量、线程安全、及其他特征同 TreeMap 。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值