我有一组有序的、唯一的对象。我目前正在使用 TreeSet 以获得正确的排序。但是,集合没有获取索引的能力。
我目前的实现很好,但不一定直观。
TreeSet<T> treeSet = new TreeSet<T>(Comparable c);
// Omitted: Add items to treeSet //
int index = new ArrayList<T>(treeSet)().indexOf(object);
有没有更简单的方法来做到这一点?
我还遇到了在 TreeMap 中的某个位置查找元素的问题。我使用权重增强了树,允许通过索引访问元素并在索引处查找元素。该项目称为 indexed-tree-map https://github.com/geniot/indexed-tree-map。在有序映射的索引中查找元素或元素的索引的实现不是基于线性迭代,而是基于树二分查找。更新树的权重也是基于爬上树到根。所以没有线性迭代。
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
}
}
Java没有这样的东西。以下是您可以做的一些建议:
Object[] arrayView = mySet.toArray();
,然后从中获取元素(这在性能和内存方面有点愚蠢)