我想维护Odp类型的对象的集合。 Odp实现Comparable。我需要能够使用其整数名称引用集合中的对象。该整数必须对应于其排序顺序(而不是插入顺序)。每个整数仅适用于一个Odp,反之亦然。
我有一个函数compareOdp(Odp o1, Odp o2)
,该函数返回一个表示两个参数相似性的数值。我将以这样一种方式来设置Odp集合,即可以很容易地问到诸如“集合中最接近foo
的Odp是什么?”这样的问题。或“在这几个Odp对象集合中,它们彼此之间有多近?”
做这个的最好方式是什么?树图? HashBiMap?
相关问题:
假设我有以下对象集:集合o1
中包含的o2
,o3
,col
。他们的排序顺序是
o2
o3
o1
我想问
col
:“列表中的第n个对象是什么?”从我所看到的,SortedSet和TreeMap没有办法做到这一点。我想我可以进行遍历,但是感觉应该有一种更简单的方法。 最佳答案
如果您使用的是Java 6,NavigableSet
API(由TreeSet
实现)可以提供帮助。
public static Odp nearest(Odp o, NavigableSet<? extends Odp> set) {
Odp f = set.floor(o), c = set.ceiling(o);
if (f == null)
return c;
if (c == null)
return f;
int df = compareOdp(o, f), dc = compareOdp(c, o);
return (df <= dc) ? f : c;
}