2011-12-08 3 views
64

, 나는 기능 다음 한ArrayList에서 항목의 색인을 찾는 더 나은 방법은 무엇입니까? 안드로이드 앱

private ArrayList<String> _categories; // eg ["horses","camels"[,etc]] 

private int getCategoryPos(String category) { 
    for(int i = 0; i < this._categories.size(); ++i) { 
     if(this._categories.get(i) == category) return i; 
    } 

    return -1; 
} 

는 "최고"방법은 요소의 위치를 ​​얻기위한 함수를 작성인가요? 아니면 내가 활용 해야하는 자바에 멋진 shmancy 네이티브 함수가 있습니까?

+1

결함이 버젼입니다 : 대부분의 경우'=='얻을 것입니다 잘못된 결과를 사용. –

+3

, 당신은 String.equals (문자열 STR)이 – MrZander

+5

@MrZander 당신이'=='과 비교 할 수 사용해야하는 '=='당신이 문자열을 비교할 수 없습니다 기억 ... 그것은 단지의 오른쪽 종류하지 비교 ;-) –

답변

147

ArrayListindexOf() method입니다. 더 API를 확인, 그러나 여기 그것이 작동하는 방법은 다음과 같습니다

private ArrayList<String> _categories; // Initialize all this stuff 

private int getCategoryPos(String category) { 
    return _categories.indexOf(category); 
} 

indexOf() 빨리, 당신의 메소드가 리턴 정확히 무엇을 반환합니다.

+2

게시 된 코드보다 복잡성면에서 "빠른"것은 아니지만보다 효율적으로 구현 될 수 있습니다. 또한 indexOf는 여기에서 약간 다르게 반응합니다 : 원래 코드는'=='를 사용하고 indexOf는'equals()'를 사용합니다. –

+0

실제로는, 최소한 Sun Java 6 코드에서와 거의 똑같은 코드입니다. 단, null을 별도로 처리하는 if-else 분기로 시작한다는 점만 다릅니다. – yshavit

+0

그것은 오래된 배열에 묶여 있고 List <>는 FindIndex() 메소드를 가지고 있지만 ArrayList의 중간에 API가 변경됩니다. D – boctulus

3

실제로 자바에서 멋진 shmancy 네이티브 함수가 있습니다.

ArrayList를 호출 인스턴스 메소드가

indexOf(Object o)

(http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html)

_categories.indexOf("camels")

내가 progr과 경험이 없다 : 다음과 같이 _categories에 전화를 할 수있을 것 안드로이드에 대한 amming -하지만이 표준 Java 응용 프로그램에 대한 작동합니다.

행운을 빈다. indexOf(Object obj)lastIndexOf(Object obj) :

+1

네이티브 함수는 C \ C++에서 나에게 암시합니다. –

2

자바 API를 사용할 수있는 두 가지 방법을 지정합니다. 첫 번째 요소는 발견 된 경우 요소의 인덱스를 반환하고 그렇지 않으면 -1을 반환합니다. 두 번째 것은 마지막 색인을 반환하는데, 이는 목록을 거꾸로 검색하는 것과 같습니다.

6

List이 정렬되어 있고 임의 액세스가 좋은 경우 (ArrayList과 같이) Collections.binarySearch을 조사해야합니다. 그렇지 않은 경우 List.indexOf을 사용해야합니다.

하지만 당신의 알고리즘은 소리, FWIW합니다 (== 다른 사람들이 지적 제외).

11
ArrayList<String> alphabetList = new ArrayList<String>(); 
alphabetList.add("A"); // 0 index 
alphabetList.add("B"); // 1 index 
alphabetList.add("C"); // 2 index 
alphabetList.add("D"); // 3 index 
alphabetList.add("E"); // 4 index 
alphabetList.add("F"); // 5 index 
alphabetList.add("G"); // 6 index 
alphabetList.add("H"); // 7 index 
alphabetList.add("I"); // 8 index 

int position = -1; 
position = alphabetList.indexOf("H"); 
if (position == -1) { 
    Log.e(TAG, "Object not found in List"); 
} else { 
    Log.i(TAG, "" + position); 
} 

출력 : 목록 인덱스 : 당신이 H을 통과하면 우리가 정의가 -1를 반환합니다 J를 전달하는 경우 7

는, 7를 반환합니다 기본값은 -1입니다.

이 코드는 가능성이

관련 문제