Ich verwende ArrayList<String>
und füge Daten zu bestimmten Indizes hinzu. Wie kann ich überprüfen, ob ein bestimmter Index vorhanden ist?
Soll ich einfach get()
und den Wert überprüfen? Oder soll ich auf eine Ausnahme warten? Gibt es eine andere Möglichkeit?
Vielen Dank für Ihre Antworten. Da ich jedoch nur bei bestimmten Indizes etwas hinzufüge, werden mir nicht die Länge der Liste angezeigt, welche verfügbar sind.
Die Methode arrayList.size()
gibt die Anzahl der Elemente in der Liste zurück. Wenn also der Index größer oder gleich size()
ist, ist er nicht vorhanden.
if(index >= myList.size()){
//index not exists
}else{
// index exists
}
Während Sie ein Dutzend Vorschläge zur Verwendung der Größe Ihrer Liste erhielten, die für Listen mit linearen Einträgen geeignet ist, schien niemand Ihre Frage zu lesen.
Wenn Sie manuell Einträge zu verschiedenen Indizes hinzufügen, funktioniert keiner dieser Vorschläge, da Sie nach einem bestimmten Index suchen müssen.
Die Verwendung von if (list.get (index) == null) funktioniert nicht, da get () eine Ausnahme auslöst, anstatt null zurückzugeben.
Versuche dies:
try {
list.get( index );
} catch ( IndexOutOfBoundsException e ) {
list.add( index, new Object() );
}
Hier wird ein neuer Eintrag hinzugefügt, wenn der Index nicht vorhanden ist. Sie können es ändern, um etwas anderes zu tun.
Das brauchen Sie ...
public boolean indexExists(final List list, final int index) {
return index >= 0 && index < list.size();
}
Warum nicht ein einfaches altes Array verwenden? Indizierter Zugriff auf eine Liste ist ein Codegeruch, denke ich.
Bezüglich Ihres Updates (was wahrscheinlich eine andere Frage sein sollte). Sie sollten ein Array dieser Objekte anstelle einer ArrayList verwenden,. Sie können also den Wert für null überprüfen:
Object[] array = new Object[MAX_ENTRIES];
..
if ( array[ 8 ] == null ) {
// not available
}
else {
// do something
}
Beste Übung
Wenn Sie nicht hundert Einträge in Ihrem Array haben, sollten Sie es als Klasse organisieren, um die magischen Zahlen 3,8 usw. zu beseitigen.
Kontrollfluss mit Ausnahme ist eine schlechte Praxis.
Normalerweise überprüfe ich nur, ob der Index kleiner als die Arraygröße ist
if (index < list.size()) {
...
}
Wenn Sie auch besorgt sind, dass der Index einen negativen Wert hat, verwenden Sie Folgendes
if (index >= 0 && index < list.size()) {
...
}
Sie können die Größe einer ArrayList
mit der size()
-Methode überprüfen. Dies gibt den maximalen Index +1 zurück
Seit Java-9
gibt es eine Standardmethode, um zu prüfen, ob ein Index zum Array gehört - Objects # checkIndex () :
List<Integer> ints = List.of(1,2,3);
System.out.println(Objects.checkIndex(1,ints.size())); // 1
System.out.println(Objects.checkIndex(10,ints.size())); //IndexOutOfBoundsException
Schneller und schmutziger Test, ob ein Index vorhanden ist oder nicht. in Ihrer Implementierung Liste ersetzen Mit Ihrer Liste testen Sie.
public boolean hasIndex(int index){
if(index < list.size())
return true;
return false;
}
oder für zweidimensionale ArrayListen ...
public boolean hasRow(int row){
if(row < _matrix.size())
return true;
return false;
}
eine einfache Möglichkeit, dies zu tun:
try {
list.get( index );
}
catch ( IndexOutOfBoundsException e ) {
if(list.isEmpty() || index >= list.size()){
// Adding new item to list.
}
}
Wenn Ihr Index weniger als die Größe Ihrer Liste ist, ist sie vorhanden, möglicherweise mit null
value. Wenn der Index größer ist, können Sie ensureCapacity()
aufrufen, um diesen Index verwenden zu können.
Wenn Sie prüfen möchten, ob ein Wert in Ihrem Index null
ist oder nicht, rufen Sie get()
auf.
Sie können die Größe des Arrays überprüfen.
package sojava;
import Java.util.ArrayList;
public class Main {
public static Object get(ArrayList list, int index) {
if (list.size() > index) { return list.get(index); }
return null;
}
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add(""); list.add(""); list.add("");
System.out.println(get(list, 4));
// prints 'null'
}
}