我需要TreeMap<Object, HGHandle>
,但我的对象既不可比,也不常见Comparator<Object>
。
Tree beeing中的顺序仅与树本身有关,是否有可用于树的一般比较器?
的信息: 我想添加一些类似数据库的库的简单缓存机制,专门用于批量导入。由于这是一项非常耗费内存的任务,我更喜欢在HashMap上使用基于树的Map,因此BulkImportCache变得更加节省空间,并且可以根据需要增长和缩小。
答案 0 :(得分:2)
为了能够使用TreeMap
,你必须能够比较你想要存储在Map
中的实例。您可能有一个比较器,它知道可以存储在地图中的不同类型的对象,并根据类型委托给特定类型的比较器。但无论如何,你必须提供一种比较机制,而非Comparable
对象则不存在。
答案 1 :(得分:-1)
编辑:代码更新。
这可能有效,但使用校验和算法要求对象不会发生变异。试图找到一种体面的方式进行测试。
import org.apache.commons.lang3.builder.HashCodeBuilder;
class HashCodeComparator implements Comparator<Object>{
@Override
public int compare(Object o1, Object o2) {
final int dif = o1.hashCode() - o2.hashCode();
if (dif == 0)
if(o1.equals(o2))
return 0;
else
return HashCodeBuilder.reflectionHashCode(o1) - HashCodeBuilder.reflectionHashCode(o2);
else
return dif;
}