java – CompareTo可能返回0,替代TreeSet / TreeMap
发布时间:2020-12-14 23:44:19 所属栏目:Java 来源:网络整理
导读:我需要一组有序的对象,目前正在使用TreeSet.我的问题是对象的compareTo通常会返回0,这意味着这两个对象的顺序保持不变. TreeMap(默认情况下由TreeSet使用)将把它们视为同一个对象,但这不是真的. 我可以使用TreeMap的替代方案吗? 使用案例:我有一组可显示的
我需要一组有序的对象,目前正在使用TreeSet.我的问题是对象的compareTo通常会返回0,这意味着这两个对象的顺序保持不变. TreeMap(默认情况下由TreeSet使用)将把它们视为同一个对象,但这不是真的.
我可以使用TreeMap的替代方案吗? 使用案例:我有一组可显示的对象.我想按Y坐标对它们进行排序,以便它们以正确的顺序呈现.当然,两个对象可能具有相同的Y坐标. 解决方法
您要定义一个要比较的条件,但您需要添加额外的条件.
你说:
那么,如果两个元素具有相同的Y坐标,那么你先放入什么?其他标准是什么? 它可能是创建时间,也可能是x坐标,您只需要定义它: Map<String,Thing> map = new TreeMap<String,Thing>(new Comparator<Thing>(){ public int compare( Thing one,Thing two ) { int result = one.y - two.y; if( result == 0 ) { // same y coordinate use another criteria result = one.x - two.x; if( result == 0 ) { //still the same? Try another criteria ( maybe creation time return one.creationTime - two.creationTime } } return result; } }); 你必须定义什么时候一件东西比其他东西更高/更低/相等/更高.如果其中一个属性与其他属性相同,则可能不应移动它们.如果有其他属性要比较使用它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 使用Java中的长字符串(heredocs) – 可读的方法?
- java – 如何在非线程的对象上调用wait()和notify()方法?
- JAVA学习之一步步搭建spring框架
- SpringSecurity动态加载用户角色权限实现登录及鉴权功能
- 并发 – Erlang – Dining Philosophers错误
- Java基础—数组
- java – 如何在hibernate实体中通过几列定义索引?
- play for scala 实现SessionFilter 过滤未登录用户跳转到登
- java – 找到由两个3位数字的乘积制成的最大回文
- java – 使用drawLine扩展Graphics类(double,double,double