2011-04-22 104 views
6

我有一个ArrayList,其中包含diff diff索引处的重复值。 例如{"Indian","American","Chinese","Australian","Indian","Russian","Indian"} 如u可以看到值 - "Indian"存在于索引 - 04 & 6查找ArrayList中重复值的索引

我需要知道所有这些索引"Indian"存在并创建一个arrayList。 这里是我的代码:

public void filter(){ 


    categoryArray = Arrays.asList(category); 

    for(String k : category){ 
     //Log.v("filter", filterTerm); 
     if(k.equals(filterTerm.toLowerCase())) 
     {    
      int p = categoryArray.indexOf(k);     
      Log.v("index of categArr", ""+p); 
      String id = Integer.toString(p); 
      indexes.add(id); 


     }// end of if 
    }// end of for 

在这里,我得到了多少次重复通过获取指标(ArrayList中)的大小发生 但是当我检查的数值。它在所有索引中都有一个值,因为在方法中:indexOf()它总是带来它在数组中找到的第一个值的索引。

因此,如果存在重复索引 - 257 我得到指数的数组大小为3。 但值是{2,2,2,};

回答

2

您需要知道您当前位于数组中的哪个索引,而不是第一个索引所在的位置。要跟踪的是,把

int i = 0; 

循环之前,并在非常结束循环的

i++; 

然后变量i告诉你,你已经找到了价值,所以您可以将i添加到索引列表中。

2

这种情况下,基于索引的for循环比您使用的增强for循环更合适,因为您需要抓取的是索引。

您可以将所有工作都基于原始数组,而不是将其转换为列表,并且我怀疑您要进行不区分大小写的匹配。

public void filter(){ 
    for(int i=0; i<category.length; i++){ 
     if(category[i].equalsIgnoreCase(filterTerm)) 
     {    
      String id = Integer.toString(i); 
      indexes.add(id); 
     } 
    } 
} 

如果你有一个ArrayList,而不是一个数组,当然类似的代码将工作,但使用list.get(i)代替category[i]

+0

是的,这个解决方案效率稍高一点,因为原始for循环隐式创建的迭代器会维护自己的单独索引。 – 2011-04-22 11:23:58

+0

你能解释一下这个答案中的filterTerm是什么? – Gibs 2017-08-09 06:41:49