Für eine Android-App habe ich die folgenden Funktionen
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;
}
Ist das der "beste" Weg, eine Funktion zum Abrufen der Position eines Elements zu schreiben? Oder gibt es in Java eine ausgefallene native Shmancy-Funktion, die ich nutzen sollte?
==
führt in den meisten Fällen zu falschen Ergebnissen.==
... es ist einfach nicht die richtige Art von Vergleich ;-)String.equals
eher so, wie===
es in einer Sprache wie JavaScript sein könnte? z.B. prüft gegen Wert UND Typ?==
Ist Objektidentität und bedeutet "ist das gleiche Objekt" . (Diese Ansicht gilt sowohl für primitive Werte als auch für Referenztypen, wenn Sie bedenken, dass es nur eine Zahl mit dem Wert 42 oder char 'x' usw. gibt.)Object.equals
ist eine virtuelle Methode, die für alle Objektinstanzen definiert ist und bedeutet "hat den gleichen Wert" , da alle Klassentypen Object erweitern und für alle Objektgleichheitstests verwendet werden sollten. Es gibt viele Fragen bei Cover==
vsObject.equals
und dies ist ein sehr wichtiges Konzept zu verstehen! Zum Beispiel ist dies falsch :"hello" == new String("hello")
! Doh!Antworten:
ArrayList
hat eineindexOf()
Methode . Überprüfen Sie die API auf weitere Informationen, aber so funktioniert es:indexOf()
gibt schnell genau das zurück, was Ihre Methode zurückgibt.quelle
==
während indexOf verwendetequals()
.Ausgabe: Listenindex: 7
Wenn Sie H übergeben , wird 7 zurückgegeben . Wenn Sie J übergeben , wird -1 zurückgegeben, da wir den Standardwert auf -1 definiert haben.
Getan
quelle
Wenn Ihre
List
sortiert ist und einen guten Direktzugriff hat (wieArrayList
auch), sollten Sie dies prüfenCollections.binarySearch
. Andernfalls sollten Sie verwendenList.indexOf
, wie andere darauf hingewiesen haben.Aber Ihr Algorithmus ist solide, fwiw (anders als die
==
anderen darauf hingewiesen haben).quelle
Es gibt in der Tat eine ausgefallene Shmancy-native Funktion in Java, die Sie nutzen sollten.
ArrayList hat eine Instanzmethode namens
indexOf(Object o)
(http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html)
Sie können es
_categories
wie folgt aufrufen :_categories.indexOf("camels")
Ich habe keine Erfahrung mit der Programmierung für Android - aber dies würde für eine Standard-Java-Anwendung funktionieren.
Viel Glück.
quelle
Die Java-API gibt zwei Methoden an, die Sie verwenden können:
indexOf(Object obj)
undlastIndexOf(Object obj)
. Der erste gibt den Index des Elements zurück, wenn er gefunden wird, andernfalls -1. Der zweite gibt den letzten Index zurück, das wäre, als würde man die Liste rückwärts durchsuchen.quelle
Der beste Weg, um die Position des Elements in der Liste zu finden, ist die Verwendung der Benutzeroberfläche "Sammlungen".
Z.B,
Ausgabe: 2
quelle
Verwenden Sie die Methode indexOf (), um das erste Vorkommen des Elements in der Auflistung zu ermitteln.
quelle