webentwicklung-frage-antwort-db.com.de

java: ArrayList - Wie kann ich prüfen, ob ein Index existiert?

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?

Aktualisieren

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. 

80
ufk

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
}
124
Amarghosh

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.

63
pli

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.

12
Paul McKenzie

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.

7
stacker

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()) {
    ...
}
5
AamirR

Sie können die Größe einer ArrayList mit der size()-Methode überprüfen. Dies gibt den maximalen Index +1 zurück

3
jwoolard

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
1
Anton Balaniuc

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;
}
1
t3dodson

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.
  }
}
0
Josué

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.

0
Dmitry

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'
    }
}
0
miku