Androidアプリの場合、次の機能があります
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;
}
それは、要素の位置を取得するための関数を記述する「最良の」方法ですか?または、Javaに空想的なネイティブ関数がありますか?
ArrayList
には indexOf()
メソッド があります。 APIの詳細を確認してください。ただし、次のように機能します。
private ArrayList<String> _categories; // Initialize all this stuff
private int getCategoryPos(String category) {
return _categories.indexOf(category);
}
indexOf()
は、メソッドが返すものを正確にすばやく返します。
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);
}
出力:リストインデックス:7
Hを渡すと7を返します。Jを渡すと-1を返しますデフォルト値を-1に定義したため。
完了
List
がソートされており(ArrayList
がそうであるように)ランダムアクセスに優れている場合は、Collections.binarySearch
を調べる必要があります。それ以外の場合は、他の人が指摘したように、List.indexOf
を使用する必要があります。
しかし、あなたのアルゴリズムは健全で、fwiw(==
他が指摘している以外)です。
Javaには、実際に活用すべき派手なネイティブ関数があります。
ArrayListには、というインスタンスメソッドがあります
indexOf(Object o)
(http://docs.Oracle.com/javase/6/docs/api/Java/util/ArrayList.html)
次のように_categories
で呼び出すことができます。
_categories.indexOf("camels")
Androidのプログラミングの経験はありませんが、これは標準のJavaアプリケーションでは機能します。
がんばろう。
Java APIは、使用可能な2つのメソッドindexOf(Object obj)
およびlastIndexOf(Object obj)
を指定します。最初の要素は、見つかった場合は要素のインデックスを返し、見つからなかった場合は-1を返します。 2番目は最後のインデックスを返します。これはリストを逆方向に検索するようなものです。