栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java之TreeSet和TreeMap

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java之TreeSet和TreeMap

TreeSet和TreeMap之间的关系

TreeSet的底层是TreeMap
和HashSet和HashMap的关系一样

TreeSet 继承关系


Set接口的实现类
关于Set接口可以看我的Java值单列集合

基本介绍

重点和其他的区别是,可以排序(按照你想要的方式)
当我们使用无参构造器创建TreeSet时
仍然是无序的
如果你希望按照添加的元素按照字符串大小排序
需要使用TreeSet一个构造器可以传入一个比较器Compartor(接口)
使用匿名内部类

但compare返回值只是一个数,要想真正了解怎么进行排序
还是要看源码

底层的排序机制


TreeSet的底层是TreeMap
把我们传入的比较器传给了TreeMap的一个属性comparator

看add方法的运行比较机制

这里还是TreeSet的put方法

然后到TreeMap的put方法

这里我只截取了put方法里面的比较那一部分

  Comparator cpr = comparator;//把我们的匿名内部类传给cpr
        if (cpr != null) {
            do {
                parent = t;
                cmp = cpr.compare(key, t.key);//调用我们定义的方法
                if (cmp < 0)//返回值大于0,左边
                    t = t.left;
                else if (cmp > 0)//返回值小于0,放右边
                    t = t.right;
                else
                    return t.setValue(value);//等于0的换直接返回
                    //不会添加
            }

key是我们传入的对象
然后t.key是哪个比较的对象
遵循compare规则
key如果和t.key比较返回值大于0
向左放
小于0,向右放
等于0,不添加

TreeMap 基本介绍


默认的话是按字符串的大小排序的大的放前面
就是String的compareTo机制

如果你想按照字符串长度比较
可以这样设计

这里是Entry存放K-V
如果你放两个字符串铲毒相同就放不进去了

源码

源码分析和前面的TreeSet相同

Collections工具类


都是静态方法,且直接对集合进行操作




min和max情况差不多不写了


易错

TreeMap和TreeSet
使用无参构造的时候
add/put进去的key值
必须实现Compartor接口
解决方法

让Person实现Compartor接口并重写compareTo方法
注意如果返回值都是0的话只能添加一个new Person()对象
对比相同不添加

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1031691.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号