1

我有一组有序的、唯一的对象。我目前正在使用 TreeSet 以获得正确的排序。但是,集合没有获取索引的能力。

我目前的实现很好,但不一定直观。

TreeSet<T> treeSet = new TreeSet<T>(Comparable c);
// Omitted: Add items to treeSet //
int index = new ArrayList<T>(treeSet)().indexOf(object);

有没有更简单的方法来做到这一点?

4

3 回答 3

1

我还遇到了在 TreeMap 中的某个位置查找元素的问题。我使用权重增强了树,允许通过索引访问元素并在索引处查找元素。该项目称为 indexed-tree-map https://github.com/geniot/indexed-tree-map。在有序映射的索引中查找元素或元素的索引的实现不是基于线性迭代,而是基于树二分查找。更新树的权重也是基于爬上树到根。所以没有线性迭代。

于 2013-02-10T17:17:14.813 回答
1

treeSet.headSet(object).size()应该做的伎俩:

import java.util.SortedSet;
import java.util.TreeSet;

class Test {

  public static void main(String[] args) {

    SortedSet<String> treeSet = new TreeSet<String>();
    String first = "index 0";
    String second = "index 1";
    treeSet.add(first);
    treeSet.add(second);

    int one = treeSet.headSet(second).size();

    System.out.println(one);
    // 1
  }
}
于 2012-06-18T22:32:04.167 回答
0

Java没有这样的东西。以下是您可以做的一些建议:

  1. 保持原样,因为这并没有想象的那么糟糕;)
  2. 使用迭代器遍历您的元素
  3. 编写一个扩展 TreeSet 的包装类并添加获取功能。
  4. 结帐番石榴,看看他们是否有这样的东西(我没用过,所以我不知道,对不起!)
  5. 创建一个数组Object[] arrayView = mySet.toArray();,然后从中获取元素(这在性能和内存方面有点愚蠢)
于 2012-06-18T22:18:59.853 回答