2011-12-08 72 views
64

對於Android應用程序,我有以下功能更好的方法來找到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; 
} 

的是,「最好」的方式來寫一個函數用於獲取元素的位置?還是有一個花哨的shmacy本地函數在Java中,我應該利用?

+1

此代碼可能有缺陷:使用在大多數情況下''==將產生不正確的結果。 – 2011-12-08 23:18:45

+3

記住,你不能用'=='來比較字符串,你必須使用String.equals(String str) – MrZander

+5

@MrZander當然你可以用'=='比較它們......它不是正確的比較;-) – 2011-12-08 23:21:46

回答

147

ArrayList有一個indexOf() method。檢查API的更多,但這裏的工作原理是:

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

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

indexOf()將返回正是你的方法返回,速度快。

+2

雖然它可能更有效地實現,但它在複雜性方面並不比發佈的代碼「快」。此外,indexOf在這裏的反應會略有不同:原始代碼[不正確]使用'==',而indexOf使用'equals()'。 – 2011-12-08 23:19:43

+0

事實上,它幾乎是完全相同的代碼(至少在我的Sun Java 6代碼中),除了它們使用分別處理null的if-else分支來啓動它。 – yshavit

+0

它的有線舊陣列和List <>都有FindIndex()方法,但API在ArrayList中間發生了變化:D – boctulus

3

在java中確實有一個花哨的shmancy原生函數,您應該利用它。

ArrayList中具有稱爲一個實例方法

indexOf(Object o)

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

您將能夠調用它_categories如下:

_categories.indexOf("camels")

我有PROGR沒有經驗爲Android設計 - 但是這對於標準的Java應用程序來說很有用。

祝你好運。

+1

原生函數對我意味着C \ C++ ..只是說。 –

2

Java API指定了可以使用的兩種方法:indexOf(Object obj)lastIndexOf(Object obj)。第一個返回元素的索引,否則返回-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,我們定義默認值爲-1。

相關問題