有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何在java中获取项目的索引。util。设置

我知道集合和列表之间的区别(唯一与允许重复、未排序/排序等)。我要寻找的是一个使元素保持有序的集合(这很容易),但我还需要能够恢复插入元素的索引。如果我插入四个元素,那么我想知道其中一个元素的插入顺序

MySet<String> set = MySet<String>();
set.add("one");
set.add("two");
set.add("three");
set.add("four");

int index = set.getIndex("two");

因此,在任何给定时刻,我都可以检查是否已经添加了字符串,并获取集合中该字符串的索引。有这样的事情吗,或者我需要自己去实现


共 (5) 个答案

  1. # 2 楼答案

    您可以通过添加所需的getIndex()方法来扩展^{}。实施和测试它需要15分钟。只需使用迭代器和计数器遍历集合,检查对象是否相等。如果找到,请返回计数器

  2. # 3 楼答案

    将字符串添加到值为索引的哈希表中如何:

      Hashtable<String, Integer> itemIndex = new Hashtable<>();
      itemIndex.put("First String",1);
      itemIndex.put("Second String",2);
      itemIndex.put("Third String",3);
    
      int indexOfThirdString = itemIndex.get("Third String");
    
  3. # 4 楼答案

    Util类中的一个小型静态自定义方法将有助于:

     public static int getIndex(Set<? extends Object> set, Object value) {
       int result = 0;
       for (Object entry:set) {
         if (entry.equals(value)) return result;
         result++;
       }
       return -1;
     }
    

    如果您需要/想要一个Set并提供getIndex()方法的类,我强烈建议实现一个新的Set并使用decorator模式:

     public class IndexAwareSet<T> implements Set {
       private Set<T> set;
       public IndexAwareSet(Set<T> set) {
         this.set = set;
       }
    
       // ... implement all methods from Set and delegate to the internal Set
    
       public int getIndex(T entry) {
         int result = 0;
         for (T entry:set) {
           if (entry.equals(value)) return result;
           result++;
         }
         return -1;
       }
     }
    
  4. # 5 楼答案

    创建集合后,只需将其转换为列表并从列表中按索引获取:

    Set<String> stringsSet = new HashSet<>();
    stringsSet.add("string1");
    stringsSet.add("string2");
    
    List<String> stringsList = new ArrayList<>(stringsSet);
    stringsList.get(0); // "string1";
    stringsList.get(1); // "string2";