Advertisement

今天学习了TreeSet,你不来看一下吗?

阅读量:

java中集合部分是比较常用的,也会企业要求必须精通的部分;
所以喽,作为小白的我只能看源码度日了;
话不多说,看东西;

复制代码
    public class TodayTest {
    public static void main(String[] args) {
        TreeSet<Integer> set= new TreeSet<Integer>();
        set.add(111);
        set.add(100);
        set.add(101);
        for (Integer integer : set) {
            System.out.println(integer);
        }
    }
    
    }

为什么TreeSet添加的数据会进行排序?

回顾—
先看List接口----
ArrayList 添加的数据是按照添加顺序排列的,可以添加重复数据;
底层是数组来实现的;
LinkedList添加数据也是按照添加顺序进行排列的,也可以添加重复数据;
底层是数组+链表即哈希表实现的;

ListIterator在迭代时候可以添加数据、移除数据
Iterator在迭代式只可以移除数据

set接口----
HasSet–添加的数据是无序的,且不能重复
底层是哈希表,且要实现hashcode和equals方法
LinkedHashSet --添加数据是按照添加顺序添加的,因为底层是数组+链表的形式(双向链表)

调用构造器–
public TreeMap() {
comparator = null;
}
可以发现该构造器中–comparator = null;

private final Comparator<? super K> comparator;

TreeSet中add方法的实现–
在这里插入图片描述 红黑树----
设置树的颜色的;

复制代码
    private void fixAfterInsertion(Entry<K,V> x) {
        x.color = RED;
    
        while (x != null && x != root && x.parent.color == RED) {
            if (parentOf(x) == leftOf(parentOf(parentOf(x)))) {
                Entry<K,V> y = rightOf(parentOf(parentOf(x)));
                if (colorOf(y) == RED) {
                    setColor(parentOf(x), BLACK);
                    setColor(y, BLACK);
                    setColor(parentOf(parentOf(x)), RED);
                    x = parentOf(parentOf(x));
                } else {
                    if (x == rightOf(parentOf(x))) {
                        x = parentOf(x);
                        rotateLeft(x);
                    }
                    setColor(parentOf(x), BLACK);
                    setColor(parentOf(parentOf(x)), RED);
                    rotateRight(parentOf(parentOf(x)));
                }
            } else {
                Entry<K,V> y = leftOf(parentOf(parentOf(x)));
                if (colorOf(y) == RED) {
                    setColor(parentOf(x), BLACK);
                    setColor(y, BLACK);
                    setColor(parentOf(parentOf(x)), RED);
                    x = parentOf(parentOf(x));
                } else {
                    if (x == leftOf(parentOf(x))) {
                        x = parentOf(x);
                        rotateRight(x);
                    }
                    setColor(parentOf(x), BLACK);
                    setColor(parentOf(parentOf(x)), RED);
                    rotateLeft(parentOf(parentOf(x)));
                }
            }
        }
        root.color = BLACK;
    }

刚开始学西二叉树,不知道分析的对不对,请大佬们指正…万分感激

今天(0722)再回来看一下put方法,添加的元素相同,则返回V----value的值,因为TreeSet只添加了一个元素(虽然是add方法,但是底层是用put方法实现的),是用TreeMap来保存–即V–value始终为空

而 TreeMap是以键值对存储的,所以添加的元素相同时则返回V----value的值不是null

全部评论 (0)

还没有任何评论哟~