我想维护Odp类型的对象的集合。 Odp实现Comparable。我需要能够使用其整数名称引用集合中的对象。该整数必须对应于其排序顺序(而不是插入顺序)。每个整数仅适用于一个Odp,反之亦然。

我有一个函数compareOdp(Odp o1, Odp o2),该函数返回一个表示两个参数相似性的数值。我将以这样一种方式来设置Odp集合,即可以很容易地问到诸如“集合中最接近foo的Odp是什么?”这样的问题。或“在这几个Odp对象集合中,它们彼此之间有多近?”

做这个的最好方式是什么?树图? HashBiMap?

相关问题:

假设我有以下对象集:集合o1中包含的o2o3col。他们的排序顺序是

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

10-08 01:37