用于TreeMap <object,t =“”>?</object,>的通用比较器

时间:2013-05-14 11:55:39

标签: java object tree comparator

我需要TreeMap<Object, HGHandle>,但我的对象既不可比,也不常见Comparator<Object>

Tree beeing中的顺序仅与树本身有关,是否有可用于树的一般比较器?

的信息: 我想添加一些类似数据库的库的简单缓存机制,专门用于批量导入。由于这是一项非常耗费内存的任务,我更喜欢在HashMap上使用基于树的Map,因此BulkImportCache变得更加节省空间,并且可以根据需要增长和缩小。

2 个答案:

答案 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;
    }