Używam ArrayList<String>
i dodaję dane do określonych indeksów, jak mogę sprawdzić, czy określony indeks istnieje?
Czy powinienem po prostu get()
sprawdzić wartość? Czy powinienem poczekać na wyjątek? Czy jest inny sposób?
Aktualizacja
Dziękuję za odpowiedzi, ale ponieważ dodam tylko rzeczy w określonych indeksach, długość listy nie pokaże mi, które są dostępne.
get()
sprawdzićnull
- nie polegaj jednak na wyjątkach. Rozważ użycieHashTable
zamiast tego java.sun.com/j2se/1.4.2/docs/api/java/util/Hashtable.htmlOdpowiedzi:
Metoda
arrayList.size()
zwraca liczbę elementów na liście - więc jeśli indeks jest większy lub równysize()
, to nie istnieje.źródło
size()
”, ponieważ jest to indeks zaczynający się od zera.index = 0
i mojąlist.size() == 0
też. więc za pierwszym razem, gdy sprawdzę, że to prawda, i przygotuję listę do zrobienia rzeczy. ale następnym razem w tym indeksie mój indeks nadal będzieindex = 0
istniał, a teraz ponownie inicjuję ten element na liście, gdy miałem coś robić. Pierwsza myśl dotyczy&&
drugiego warunku, takiego jaklist.get(index) == null
ale to nie działa, dlatego pojawiają się pytania takie jak toChociaż otrzymałeś kilkanaście sugestii dotyczących wykorzystania rozmiaru listy, które działają w przypadku list z wpisami liniowymi, nikt nie czytał Twojego pytania.
Jeśli dodasz wpisy ręcznie w różnych indeksach, żadna z tych sugestii nie zadziała, ponieważ musisz sprawdzić określony indeks.
Używanie if (list.get (index) == null) również nie zadziała, ponieważ get () zgłasza wyjątek zamiast zwracać wartość null.
Spróbuj tego:
Tutaj dodawany jest nowy wpis, jeśli indeks nie istnieje. Możesz to zmienić, aby zrobić coś innego.
źródło
try/catch
do tego rodzaju pracy, spowolni to twój program o 50% lub może więcej .. sprawdzanie błędów dodaje jak pasek do istniejącego kodu, aby go spowolnić .. lepiej unikać go w krytycznych obszarach. Sprawdzanielength
w tym przypadku jest najlepszą rzeczą, jaką możesz zrobić, ponieważindex
zawsze będzie mniej niżlength
stareindex
, zostaną przesunięte i staną się noweindex
, jeśliremove
je masz , dlatego sprawdzanie regułylength
zawsze będzie działać.To jest to, czego potrzebujesz ...
Dlaczego nie użyć zwykłej starej tablicy? Zindeksowany dostęp do listy to chyba zapach kodu.
źródło
Zwykle po prostu sprawdzam, czy indeks jest mniejszy niż rozmiar tablicy
Jeśli obawiasz się, że indeks jest wartością ujemną, użyj następujących
źródło
Odnośnie twojej aktualizacji (co prawdopodobnie powinno być innym pytaniem). Powinieneś użyć tablicy tych obiektów zamiast ArrayList, więc możesz po prostu sprawdzić wartość null:
Najlepsze praktyki
Jeśli nie masz setek wpisów w swojej tablicy, powinieneś rozważyć zorganizowanie jej jako klasy, aby pozbyć się magicznych liczb 3,8 itp.
Sterowanie przepływem za pomocą wyjątku to zła praktyka.
źródło
Ponieważ
java-9
istnieje standardowy sposób sprawdzenia, czy indeks należy do tablicy - Objects # checkIndex () :źródło
of()
metoda jest również dodana w Javie 9 do klasy List : docs.oracle.com/javase/9/docs/api/java/util/List.html#of--Możesz sprawdzić rozmiar za
ArrayList
pomocąsize()
metody. Zwróci to maksymalny indeks +1źródło
prosty sposób na zrobienie tego:
źródło
Szybki i brudny test, czy indeks istnieje, czy nie. na liście zastąpień implementacji Lista, którą testujesz.
lub dla 2Dimensional ArrayLists ...
źródło
.length
tego,list.size()
ale to nic wielkiego, cały czas tak schrzaniłem haha, polegam na kompilatorze, który poprowadzi mnie po tym. PrawdopodobnieJeśli twój indeks jest mniejszy niż rozmiar twojej listy, to istnieje, prawdopodobnie z
null
wartością. Jeśli indeks jest większy, możesz zadzwonić,ensureCapacity()
aby móc użyć tego indeksu.Jeśli chcesz sprawdzić, czy wartość w Twoim indeksie jest,
null
czy nie, zadzwońget()
źródło
Możesz sprawdzić rozmiar tablicy.
źródło