Java集合—TreeSet和TreeMap

一、TreeSet

1.当使用无参构造器,创建TreeSet时,仍然是无序的。
2.若希望添加的元素有序,需要使用TreeSet提供的构造器,传入一个比较器。
    该比较器是一个接口,里面有一个方法叫compare(),传入一个实现该接口的类(匿名内部类)
    而且可见,TreeSet构造器在底层其实是new一个TreeMap()
    
    
    
    
底层:
add():
    调用底层TreeMap的put()方法
    

二、TreeMap

    底层为红黑树
源码:
构造器:
    无参:
        直接将comparator置为null。
    
    有参:
        参数为实现Comparator接口的类:
        
put:
    如果root为null,即第一次加入,则直接加入
    否则,将comparater赋值给cpr
        若cpr不为空,则:
            根据compare()进行判断,若等于0,则重新设置value,并返回旧值。
            
        若cpr为空,则:
            key为null,则抛出异常
            key不为null,则采用默认的比较方法,
            先将key转变成Comparable对象,如果Key实现了该对象,则可以转,String、包装类等都有实现该接口。
                没有实现则会报错。
            然后执行Key对象自身的compareTo()函数。
            例如,两个String进行比较则调用String的compare()方法。
                        若两个key无法比较则会报错
            
    然后设置改该节点为对应的左子树或右子树
    再然后调用fixAfterInsertion()方法就是对这棵树进行调整、平衡。
    最后size++    modCount++
    
compare:
            
  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值