• TreeSet源码分析


    简介

    基于TreeMap的NavigableSet实现。 元素使用自然排序进行排序,或通过在集合创建时提供的Comparator进行排序,具体取决于所使用的构造函数。此实现保证在log(n)时间成本add , remove和contains 。

    类图

    在这里插入图片描述

    属性

    	-- 基于map来实现
        private transient NavigableMap<E,Object> m;
        -- 因为是基于map的实现 value值要是用这个
        private static final Object PRESENT = new Object();
    

    构造方法

    -- 内部实现依赖TreeMap
    public TreeSet() {
        this(new TreeMap<E,Object>());
    }
    TreeSet(NavigableMap<E,Object> m) {
        this.m = m;
    }
    public TreeSet(Comparator<? super E> comparator) {
        this(new TreeMap<>(comparator));
    }
    public TreeSet(Collection<? extends E> c) {
        this();
        addAll(c);
    }
    public TreeSet(SortedSet<E> s) {
        this(s.comparator());
        addAll(s);
    }
    

    方法

    -- 方法都是调用TreeMap的方法实现
    public boolean add(E e) {
        return m.put(e, PRESENT)==null;
    }
    public boolean remove(Object o) {
        return m.remove(o)==PRESENT;
    }
    public void clear() {
        m.clear();
    }
    public boolean contains(Object o) {
        return m.containsKey(o);
    }
    public boolean isEmpty() {
        return m.isEmpty();
    }
    public int size() {
        return m.size();
    }
    public Iterator<E> iterator() {
        return m.navigableKeySet().iterator();
    }
    -- 实现了一些导航方法
    public E first() {
        return m.firstKey();
    }
    public E lower(E e) {
        return m.lowerKey(e);
    }
    -- 重写实现深拷贝
    public Object clone() {
        TreeSet<E> clone;
        try {
            clone = (TreeSet<E>) super.clone();
        } catch (CloneNotSupportedException e) {
            throw new InternalError(e);
        }
    
        clone.m = new TreeMap<>(m);
        return clone;
    }
    

    总结

    内部使用NavigableMap实现,大部分时间是TreeMap
    有序
    非线程安全

  • 相关阅读:
    组合数学
    组合数学
    组合数学
    组合数学 + STL --- 利用STL生成全排列
    组合数学
    数论
    给xcode项目重命名
    iOS中动态注入JavaScript方法。动态给html标签添加事件
    swift
    swift
  • 原文地址:https://www.cnblogs.com/paper-man/p/13284618.html
Copyright © 2020-2023  润新知