查找ArrayList中重复值的索引

时间:2011-04-22 10:40:16

标签: java arraylist

我有一个ArrayList,它包含diff diff index的重复值。 例如{"Indian","American","Chinese","Australian","Indian","Russian","Indian"} 正如你可以看到价值 - "Indian"存在于索引 - 04& 6

我需要知道"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 个答案:

答案 0 :(得分:2)

您需要知道当前所在阵列中的哪个索引,而不是第一个找到它的索引。为了跟踪这一点,请输入

int i = 0;
在循环之前

,在循环的结束

i++;

然后变量i会告诉您在哪里找到了值,因此您可以将i添加到索引列表中。

答案 1 :(得分:2)

这种情况下,基于索引的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]