我需要TreeMap<Object, HGHandle>
,但我的对象既不是 Comparable 也没有共同的Comparator<Object>
.
树蜂中的顺序仅与树本身相关,是否有任何通用比较器可以用于树?
信息:我想添加一些类似数据库的库的简单缓存机制,专门用于批量导入。由于它是一项非常消耗内存的任务,因此我更喜欢使用基于树的 Map 而不是 HashMap,因此 BulkImportCache 变得更加节省空间,并且可以根据需要进行扩展和收缩。
我需要TreeMap<Object, HGHandle>
,但我的对象既不是 Comparable 也没有共同的Comparator<Object>
.
树蜂中的顺序仅与树本身相关,是否有任何通用比较器可以用于树?
信息:我想添加一些类似数据库的库的简单缓存机制,专门用于批量导入。由于它是一项非常消耗内存的任务,因此我更喜欢使用基于树的 Map 而不是 HashMap,因此 BulkImportCache 变得更加节省空间,并且可以根据需要进行扩展和收缩。
为了能够使用 aTreeMap
您必须能够比较您打算存储在Map
. 您可能有一个比较器,它知道可以存储在映射中的不同类型的对象,并根据类型委托给特定于类型的比较器。但是,无论以何种方式分割它,都必须提供一种比较机制,并且对于非Comparable
对象不存在这种机制。
编辑:代码更新。
这可能有效,但使用校验和算法需要对象不发生变异。试图找到一个体面的方法来测试。
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;
}