Java Set 排序原理解析

还是在讲原理之前,看一个简单的示例程序。

        	Set<Integer> st= new TreeSet<Integer>();
	st.add(15);
	st.add(16);
	st.add(2);
	st.add(1);
	System.out.println(st);

        [1, 2, 15, 16]

      

TreeSet是具有排序的特点的。通过源码看看它是如何实现排序的。

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

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

TreeSet底层是TreeMap来实现的。看add底层调用的关键代码。

                    if (key == null)
                throw new NullPointerException();
            Comparable<? super K> k = (Comparable<? super K>) key;
            do {
                parent = t;
                cmp = k.compareTo(t.key);
                if (cmp < 0)
                    t = t.left;
                else if (cmp > 0)
                    t = t.right;
                else
                    return t.setValue(value);
            } while (t != null);

      

原来是用二叉排序树来实现排序的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值