TreeSet跟TreeMap条件限制

面试题如下

56、TreeMap和TreeSet在排序时如何比较元素?Collections工具类中的sort()方法如何比较元素?
答:TreeSet要求存放的对象所属的类必须实现Comparable接口,该接口提供了比较元素的compareTo()方法,当插入元素时会回调该方法比较元素的大小。TreeMap要求存放的键值对映射的键必须实现Comparable接口从而根据键对元素进行排序。

从上可得出放入TreeSet跟TreeMap的对象一定要实现Comparable?

有如下2个问题

  1. 本人写了一段测试代码,发现如果对象不实现该接口一样可以放进去 2.如果不实现该接口放进去的话,对象有序吗。

代码如下

 import java.util.*;

public class Leetcode {
    public static void main(String[] agrs){
        Map<Integer,Student> map = new TreeMap<>();
        Student student = new Student();
        map.put(1,student);
        Set<Student> set = new TreeSet<>();
        set.add(student);
    }

}



public class Student {
    private String name;
    private int age;
    private int score;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getScore() {
        return score;
    }

    public void setScore(int score) {
        this.score = score;
    }
}

4个回答

如果想把自定义类的对象存入TreeSet用sort进行排序, 那么才需要实现Comparable接口,你的“回答”要么断章取义,要么是错的。

StackTc
StackTc 这个是我从importnew上面看的别人总结的面试题,我也觉得它说的是错的,不一定需要 实现comparable接口
一年多之前 回复

之前说了,两个序不是一回事。

hello world放入字符集合,拿出来还是hello world叫有序。拿出来是别的,比如hwoeollrdl就是无序
实现Comparable是为了排序,比如 edhllloorw,这个叫排序。

有序分

2种
1、进出顺序 相同 这叫有序,
2、 进去之后 在里面进行自然排序 以数字 字母 或者自定义排序器 进行 ,compator更方便,不需要类实现接口。 comparable就是后者。实体类不实现该接口无法排序。String 可以排序是自带实现了comparable 所以用户需要排序也要实现。当然最好使用compator更方便不需要破坏原类

qq_34446485
梦境之后再无梦境 回复StackTc: 不一定要去实现。对于有些第三方类我们没有权限修改,最后只能通过比较器来实现比较。compator[拼写忽略] 构造treemap tree set的时候需要传入比较器【jdk1.7源码:public TreeSet(Comparator<? super E> comparator) { this(new TreeMap<>(comparator)); }】
一年多之前 回复
StackTc
StackTc TreeSet要求存放的对象所属的类必须实现Comparable接 这句话怎么解释
一年多之前 回复

如果仅仅是为了有序 不是必须实现comparable【该比较方法compareto好像是一个参数】, 可以选择实现compator比较器【该compar方法好像是2个参数】
如果是为了有序且不想单独设计比较器compator 那么只有该类实现comparable接口。
综上所述 treemap有重载构造。可以传入一个实现了comparable接口的自然排序规则,也可以传入一个实现了compator接口的任何自定义的排序规则。后者更常用。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
深入TreeMap和TreeSet集合
hashSet底层则实际是一个hashMap,而TreeSet底层则采用NavigableMap这个接口来保存TreeSet集合,而实际上NavigableMap只是一个接口,实际上面TreeSet还是用TreeMap来保存set元素.    TreeSet的初始化的时候都是初始化都是new 了一个TreeMap进行初始化;     TreeMap,它采用一种被称为“红黑树”的排序二叉树来保存
treeSet和treeMap的区别
请问treeSet和treeMap有什么区别,应该如何使用(最好有例子)
深入源码分析TreeSet和TreeMap
分析TreeMap源码
TreeSet和TreeMap实现排序
TreeSet TreeSet类是Set接口的一个实现类,确保元素实体可以排序,不同于HashSet(也是Set接口的实现类),TreeSet不需要重写hashcode和equals方法。 TreeSet的构造方法有以下几种 那么就可以有两种排序方式 1. java.lang.Comparble+compareTo new TreeSet() 用这种
[TreeMap和TreeSet]——简单应用
[TreeMap和TreeSet]——简单应用
TreeMap和TreeSet的区别与相同点
相同点: 1、都是有序集合 2、TreeMap是TreeSet的底层结构 3、运行速度都比hash慢 区别: 1、TreeSet只存储一个对象,而TreeMap存储两个对象Key和Value(仅仅key对象有序) 2、TreeSet中不能有重复对象,而TreeMap中可以存在 3、TreeMap的底层采用红黑树的实现,完成数据有序的插入,排序。 PS:红黑树的特点: 1:每个节点要么是红色/黑色。...
SortedSet ,SorteMap ,TreeSet() ,TreeMap()
SortedSet chaterNameSet ;rnSortedMap nameToBean ;rnchaterNameSet = Collections.synchronizedSortedSet(new TreeSet()) ;rnnameToBean = Collections.synchronizedSortedMap(new TreeMap()) ;rnrn这段代码小弟我不明白是什么意思.rnSortedSet ,SorteMap ,TreeSet() ,TreeMap() 的是什么 ,有什么作用啊?rn谢谢,请高手帮我解释这段代码.rn
TreeSet,基于TreeMap实现
TreeSet基于TreeMap实现,支持排序; TreeSet是非线程安全的;   public class TreeSet&amp;lt;E&amp;gt; extends AbstractSet&amp;lt;E&amp;gt; implements NavigableSet&amp;lt;E&amp;gt;, Cloneable, java.io.Serializable { /** * The ...
TreeSet和TreeMap的一点总结
首先简单介绍下TreeSet和TreeMap的两种排序: 自然排序 通过comparator排序 private static void compareWithCpmparator(){ TreeSet&lt;String&gt; treeSet =new TreeSet&lt;&gt;(); List...
java集合类深入分析之TreeMap/TreeSet篇
简介     TreeMap和TreeSet算是java集合类里面比较有难度的数据结构。和普通的HashMap不一样,普通的HashMap元素存取的时间复杂度一般是O(1)的范围。而TreeMap内部对元素的操作复杂度为O(logn)。虽然在元素的存取方面TreeMap并不占优,但是它内部的元素都是排序的,当需要查找某些元素以及顺序输出元素的时候它能够带来比较理想的结果。可以说,TreeMa...
集合类源码——TreeMap和TreeSet(1.8)
1、TreeMappublic class TreeMap&amp;lt;K, V&amp;gt; extends AbstractMap&amp;lt;K, V&amp;gt; implements NavigableMap&amp;lt;K, V&amp;gt;, Cloneable, java.io.Serializable { private final Comparator&amp;lt;? super K&amp;gt; comparator;...
java TreeSet,TreeMap——红黑树原理
在java中使用TreeSet集合时,需要对加入的元素进行比较,对于同一个类的元素之间进行比较,需要实现Comparable接口的compareTo(Object obj)方法,对于不同类之间的元素比较,需要实现Comparator接口的compare(Object obj1,Object obj2)方法 加入元素的add(Object obj)方法的内部: public boolean add...
集合第五发TreeSet和TreeMap
TreeSet和TreeMap 因为Tree是排序的,排序就要用到被排序元素的排序方法(compareTo())而这个方法是comparable接口的抽象方法,因此使用TreeSet加入当中的元素必须实现该接口,然后实现compareTo方法。 TreeSet调用add方法是,会让新添加的元素调用compareTo方法,依次把已有的元素作为参数传入确定大小。 下面我们通过代码来具体理解:(P
Java中TreeMap和TreeSet的底层实现
TreeSet底层则采用NavigableMap这个接口来保存TreeSet集合,而实际上NavigableMap只是一个接口,实际上TreeSet还是用TreeMap来保存set元素。 TreeSet初始化的时候会new 一个TreeMap进行初始化; private transient NavigableMap&amp;lt;E,Object&amp;gt; m; TreeSet(NavigableMa...
引用类型_排序容器_TreeSet与TreeMap
1、TreeSet:数据元素可以排序且不可重复Set接口:HashSet,元素必须重写hashcode和equasls方法。去重:比较等于0即重复1、元素可以排序 java.lang.Comparable + compareTo new TreeSet()2、排序业务类 java.util.Comparator + compare new TreeSet(Comparator2、解决数据重复问题
Set、TreeSet、Map、TreeMap简单介绍
Set Set接口:不重复。 SortedSet接口:不重复,有序 TreeSet类:SortedSet接口的一种有序实现;基本操作花费对数最坏情形时间   默认情况下,排序假设TreeSet中的项实现Comparable接口。另一种排序可以通过用Comparator接口实例化TreeSet来确定。 Map Map接口:关键字必须唯一,值不必唯一;isEmpty、cle
TreeSet和TreeMap初始化时有无比较器的测试
1、二者默认按照升序排序:TreeSet按照存储元素升序排序;TreeMap按照key升序排序。 2、要想自定义TreeSet和TreeMap中元素的排序,可以在其初始化时,指定比较器即可。 3、测试code: package sourcecode.analysis; import java.util.*; public class testCode { pub
Java集合框架之四--------TreeMap与TreeSet源码分析
1.1TreeMap源码分析 使用TreeMap存储进行排序,要么自然排序,使用一些实现comparable接口的类的compareTo方法,要么自己定义比较机制,一种是user类去实现comparable接口,并实现compareTo方法,另一种是mycomparator写一个类去实现comparator接口实现compare方法,将mycomparator作为参数传入到treemap构造方法...
127_容器_排序容器_TreeSet与TreeMap
Person.java package collection.sort.TreeSet_TreeMap;public class Person { private final String name;//名称 private final int handsome;//帅气指数 public Person() { name =null; hands
Java容器-引用数据类型排序+TreeSet、TreeMap底层实现
Java容器-引用数据类型排序+TreeSet、TreeMap底层实现 目录 1、冒泡排序的实现 2、比较接口(普通数据类型、引用数据类型)   普通数据类型:冒泡排序   引用数据类型:包装类(Integer、String、Character、Date)   自定义类型:实体类:implements Comparable+compare...
如何实现TreeMap和TreeSet中的排序?
以TreeMap为例实现排序: 代码如下,以两种方式进行演示 演示一,实现Comparable接口 public class Student implements Comparable{ private String name; private int age; public String getName() { return name; } public void setName(String...
treemap treeset hashset hashmap 简要介绍
treemap treeset hashset hashmap 简要介绍
List,TreeSet,TreeMap实现排序的几种方法
集合主要有以上几种, 1、其中HashSet,TreeSet,HashMap,TreeMap是不可重复的,HashSet和HashMap需要通过重写hashCode()和equals来实现去重,而TreeSet和TreeMap需要通过实现Comparable或者Comparator接口来实现去重。 2、HashSet和HashMap不能实现排序,而List,TreeSet,TreeMap可...
40.Set、Map、TreeSet、TreeMap操作代码实战
一、Set、Map代码实战 import scala.collection.mutable val data = mutable.Set.empty[Int] data ++= List(1,2,3) //追加集合 data += 4 //追加元素 println(data) data --= List(2,3) //减少集合
条件限制
if combobox1.Text='编号' thenrnbeginrnadoquery1.SQL.Clear;rnadoquery1.Close;rnadoquery1.SQL.Text:='select * from db_name where id='+edit1.Text+'';rnadoquery1.Open;rnrnrn请问上面那个代码,当combobox1.text='编号' 时我想让 edit1这个文本框只能输入数字,请问用什么办法能实现。rn
where 后面跟in条件
rnrn在type文本框里输入,SH,TH,DJ,用SQL语句 where class in ('"&type&"')查询会有错误,有什么办法可以将条件转为 where class in ('SH','TH','DJ')rn
限制玩游戏跟看电影
公司需要弄一个限制玩游戏跟看电影的软件 请问各路大神免费的有没有
Java集合(3)一 红黑树、TreeMap与TreeSet(上)
引言 在系列的第一篇文章中说过Map&amp;lt;K,V&amp;gt;接口与Set&amp;lt;E&amp;gt;接口,Set&amp;lt;E&amp;gt;接口定义了一组不能添加重复元素的集,不能通过索引来访问的集;Map&amp;lt;K,V&amp;gt;接口定义了从键映射到值的一组对象。同时也说过了因为键集不能重复的特性,Map&amp;lt;K,V&amp;gt;的键集由Set&amp;lt;E&amp;gt;来实现。 通过查看TreeSet&amp;lt;E&amp;gt;的构造函数,可
TreeMap
在 java中使用TreeMap循环50次存储10-50之间随机数及次数(key数字本身,value数字次数)rn
【Java】HashMap、HashSet、TreeMap、TreeSet判断元素相同(代码整理)
1.1     HashMap        先来看一下HashMap里面是怎么存放元素的。Map里面存放的每一个元素都是key-value这样的键值对,而且都是通过put方法进行添加的,而且相同的key在Map中只会有一个与之关联的value存在。put方法在Map中的定义如下。     V put(K key, V value);     它用来存放key-value这样的一个键值对
JAVA学习【9】 集合框架TreeSet类和TreeMap类的排序
TreeSet类和TreeMap类有序且元素唯一,Integer和String等都有有默认排序方式,即键值依次比较ASCii码值按升序排列。其他类型必须实现Comparable接口,并且重写compareTo()方法。         有时候需根据Integer或String等JDK已重写过compareTo()的变量来排序,例如降序排列,直接重写覆盖Integer中的compareTo()方法
java数据结构(二)——Set(HashSet,TreeSet),泛型,Map(HashMap,TreeMap)
•Set:元素是无序(存入和取出的顺序不一定一致),元素不可以重复 Set集合的功能和Collection是一致的概念 HashSet是通过HashMap实现的,TreeSet是通过TreeMap实现的,只不过Set用的只是Map的key Map的key和Set都有一个共同的特性就是集合的唯一性.TreeMap更是多了一个排序的功能. hashCode和equal()是HashMap用的, 因
使用容器HashSet HashMap TreeSet TreeMap 解决的一系列问题
Set 集合 , Map 字典都是基本的接口,而HashSet , HashMap , TreeSet , TreeMap都是实现接口的容器。Set : 集合, 集合内不能重复。它的两个实现类:HashSet:HashSet的底层函数是用散列表写的,它的查找,删除,增加,修改的时间复杂度都是O(1),对于一些简单的问题,使用HashSet是一个非常快速而有效的方法,但是它的缺点在于,HashSet...
TreeSet、TreeMap多线程场景可能出现infinite loop
1.TreeSet,基于TreeMap线程不安全的红黑树数据结构。在线程不安全访问时,有可能出现死循环。 https://ivoanjo.me/blog/2018/07/21/writing-to-a-java-treemap-concurrently-can-lead-to-an-infinite-loop-during-reads/ android p里面RunningTasks.java...
枚举,找限制条件
B. Planning The Expedition time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard output Natasha is planning an expedition to Mars for n people. One...
chapter2- 概率模型限制条件
1.条件独立性(图结构上) 2. 条件概率或者能量函数的代数结构
SQL 条件限制问题?
SELECT TOP 5 sUserName,rnrn(SELECT sum(b.iPageCount) FROM fastManOwner.FMPrt_PrintApply b rnINNER JOIN fastManOwner.FMPrt_Print c ON b.iPrintApplyID=c.iPrintApplyID AND a.iUserCode=b.iCreateUC AND b.bDelete<>1 AND b.iFlowState=4 rnAND DATEDIFF(day,c.tPrintDate,getdate())=0) AS TodaySumiPageCount,rnrn(SELECT sum(iPageCount) FROM fastManOwner.FMPrt_PrintApply b rnINNER JOIN fastManOwner.FMPrt_Print c ON b.iPrintApplyID=c.iPrintApplyID AND a.iUserCode=b.iCreateUC AND b.bDelete<>1 AND b.iFlowState=4) rnAS SumiPageCount rnrnFROM fastManOwner.FSys_User arnrnWHERE bDelete<>1rnrnORDER BY TodaySumiPageCount DESC,SumiPageCount DESCrn如何为TodaySumiPageCount ,SumiPageCount 加入条件?
行列转换时的限制条件
现在库里有A,B 2张表,通过交叉连接的表在进行行列转换,结果显示出了多条生产线的记录,我现在想加个限制条件,只想查出1#生产线的记录,应该加在哪里?,下面是我的代码rndeclare @sql varchar(8000)rnset @sql = 'select A.GkID,A.OrderNo,A.Customer,A.Project,A.Unti as 生产线' rnselect @sql = @sql + ' ,SUM(case MaterialCode when ''' + MaterialCode + ''' then ActualQuality else 0 end) [' + MaterialCode + ']'rnfrom (select distinct MaterialCode from B) as a rnset @sql = @sql + ' from A LEFT JOIN B ON A.Unti=B.Unti AND A.RecordID=B.RecordID group by A.GkID,A.OrderNo,A.Customer,A.Project,A.Unti' rnexec(@sql)
限制一些数字的条件
1到100之内 怎么让带9的数字不出现rnrn谢谢
排序和条件限制
※ order by select [distinct] {column_name…|*|exp|alias_name} (exp表达式,alias_name别名) from table_name order by column_name 排序的标记… 执行顺序:from-&amp;gt;select-&amp;gt;order by order by 优先级最低,总是最后执行 ※ 排序的标记: ASC...
相关热词 c# 线程结束时执行 c# kb mb 图片 c# 替换第几位字符 c#项目决定成败 c# 与matlab c# xml缩进 c#传感器基础 c#操作wps c# md5使用方法 c# 引用父窗口的组件