2011-04-22 11 views
6

diff diff 인덱스에 중복 값이 ​​포함 된 ArrayList가 있습니다. 예를 들어 {"Indian","American","Chinese","Australian","Indian","Russian","Indian"} 값이 표시 될 수 있습니다. - 0, 4 & 6"Indian"이 있습니다.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() 항상 배열에서 찾은 첫 번째 값의 인덱스를 가져옵니다. 7 내가 3으로 인덱스의 배열 크기를 얻을 2, 5 -

그래서 중복 인덱스에 존재하는 경우. 그러나 값은 {2,2,2,};

답변

2

현재 배열에있는 색인이 무엇인지 알아야합니다. 색인을 찾을 수있는 첫 번째 색인이 아 닙니다. 그 추적하기 위해 루프 전에

int i = 0; 

을 넣어, 그리고 에서 매우 때문에, 루프의 변수 i 당신이 가치를 발견 알려줍니다 그리고

i++; 

을 넣어 종료 인덱스 목록에 i을 추가 할 수 있습니다.

2

이것은 색인 기반 for 루프가 사용중인 향상된 for 루프보다 더 적합한 상황입니다. 색인을 얻는 데 필요한 것이므로 색인입니다.

원래 배열을 목록으로 변환하는 대신 모든 작업을 기반으로 할 수 있으며 대소 문자를 구분하지 않을 것이라고 생각합니다. 당신이 ArrayList에보다는 배열이있는 경우

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

은 물론 유사한 코드가 작동하지만 category[i] 대신 list.get(i)를 사용하여.

+0

그렇습니다. 원래의 for 루프에 의해 암시 적으로 생성 된 반복자가 자체 별도의 인덱스를 유지하기 때문에이 솔루션은 약간 더 효율적입니다. –

+0

당신은이 답변에서 filterTerm이 무엇인지 설명 할 수 있습니까 ?? – Gibs