有 Java 编程相关的问题?

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

查找列表<Long>中与某个元素对应的所有索引的java方法

假设我有一个名为longX和一个名为List<Long>foo包含X作为许多元素中的一个非唯一元素。我需要应用什么方法来查找foo中与X对应的所有索引。这个foo不一定是经过排序的(但如果有一种特定的方法需要排序,那么一个好的答案可能会假设这一点——我对排序和未排序的情况都感兴趣)

例如,这可能是问题设置:

long X = 5L
List<Long> foo = new ArrayList<Long>();
foo.add(4L);
foo.add(5L);
foo.add(5L);
foo.add(6L);
foo.add(7L);

我希望该方法接受X作为参数,并返回一个包含12索引的列表(或其他对象),因为它们对应于fooX的位置

琐碎地

public static List<Long> locator(long target, List<Long> fooList) {
   List<Long> output = new ArrayList<Long>();

   for(int i = 0 ; i < foo.size() ; i++) {
      if(foo.get(i) == target) {
         output.add(i);
      }
   }

   return output;
}

但是我想要一个更快的方法,以防我的foo非常长


共 (1) 个答案

  1. # 1 楼答案

    尝试以下解决方案:

    int firstIndex = foo.indexOf(X);
    
    int count = Collections.frequency(foo, X);
    

    如果你的List排序的,那么你有两个位置:firstIndexfirstIndex + 1

    从你的例子来看:

    long X = 5L
    List<Long> foo = new ArrayList<Long>();
    foo.add(4L);
    foo.add(5L);
    foo.add(5L);
    foo.add(6L);
    foo.add(7L);
    
    int firstIndex = foo.indexOf(X); // 1
    int count = Collections.frequency(foo, X); // 2
    
    List<Long> output = new ArrayList<Long>();
    
    for(int i=firstIndex; i<count; i++ ){
      output.add(i);
    }