List 是否有一个Java集合,其对象是唯一的(如在集合中),但能够获取某个对象的索引/位置(如在列表中)?

List 是否有一个Java集合,其对象是唯一的(如在集合中),但能够获取某个对象的索引/位置(如在列表中)?,list,set,unique,List,Set,Unique,我有一套有序、独特的对象。我目前正在使用树集,以获得正确的顺序。但是,集合不具备获取索引的能力 我当前的实现很好,但不一定是直观的 TreeSet<T> treeSet = new TreeSet<T>(Comparable c); // Omitted: Add items to treeSet // int index = new ArrayList<T>(treeSet)().indexOf(object); TreeSet-TreeSet=新树集(可

我有一套有序、独特的对象。我目前正在使用树集,以获得正确的顺序。但是,集合不具备获取索引的能力

我当前的实现很好,但不一定是直观的

TreeSet<T> treeSet = new TreeSet<T>(Comparable c);
// Omitted: Add items to treeSet //
int index = new ArrayList<T>(treeSet)().indexOf(object);
TreeSet-TreeSet=新树集(可比c);
//省略:将项目添加到树集//
int index=newarraylist(treeSet)().indexOf(object);

有更简单的方法吗?

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

  • 让它保持原样,因为这并没有它可能的那么糟糕;)
  • 使用迭代器遍历元素
  • 编写一个包装器类,该类扩展TreeSet并添加get功能
  • 结帐,看看他们是否有这样的东西(我没有用过,所以我说不出来,对不起!)
  • 创建一个数组
    Object[]arrayView=mySet.toArray()然后从中获取元素(这在性能和内存方面有点愚蠢)
  • 我们应该这样做:

    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
      }
    }
    
    import java.util.SortedSet;
    导入java.util.TreeSet;
    课堂测试{
    公共静态void main(字符串[]args){
    SortedSet treeSet=新treeSet();
    String first=“索引0”;
    字符串second=“索引1”;
    树集。添加(第一);
    树集。添加(第二);
    int one=树集.耳机(第二个).size();
    系统输出打印项次(一);
    // 1
    }
    }
    
    我还面临在树映射中的某个位置查找元素的问题。我用权重增强了树,允许按索引访问元素并在索引处查找元素。
    该项目称为索引树映射。在排序映射的索引中查找元素或元素索引的实现不是基于线性迭代,而是基于树二进制搜索。更新树的权重也基于向上爬到树的根部。因此没有线性迭代。

    这确实有效。不幸的是,它并不比手动遍历树快——Java不缓存子树大小,因此它可能是O(n)而不是O(logn)。