Zastanawiałem się, jak zainicjować tablicę liczb całkowitych, tak aby jej rozmiar i wartości zmieniały się w trakcie wykonywania mojego programu, jakieś sugestie?
108
Tak: użyj ArrayList .
W Javie „normalne” tablice mają stałą wielkość. Musisz nadać im rozmiar i nie możesz ich rozszerzać ani zmniejszać. Aby zmienić rozmiar, musisz utworzyć nową tablicę i skopiować żądane dane - co jest nieefektywne i uciążliwe.
Na szczęście istnieje wiele rodzajów wbudowanych klas, które implementują typowe struktury danych, a także inne przydatne narzędzia. Będziesz chciał sprawdzić API Java 6, aby uzyskać pełną ich listę.
Jedno zastrzeżenie: ArrayList może przechowywać tylko obiekty (np. Liczby całkowite), a nie prymitywy (np. Int). W WIĘKSZOŚCI przypadków autoboxing / autounboxing zajmie się tym po cichu, ale możesz uzyskać dziwne zachowanie w zależności od tego, co robisz.
int[] array = new int[size];
size
jest zmienną, ale długość tablicy musi być ustalona, mam rację? @Lord Torgamussize
w trakcie działania programu; dostaje taki rozmiar, jaki jest,size
kiedy ta linia jest wykonywana.null
. Jakieś pomysły, dlaczego?Tablice w Javie mają stały rozmiar. Potrzebujesz tablicy ArrayList, jednej z wielu niezwykle cennych kolekcji dostępnych w Javie.
Zamiast
używasz
Następnie, aby zmienić używaną listę
ints.add(y)
iints.remove(z)
spośród wielu innych przydatnych metod, można znaleźć w odpowiednich Javadocach.Zdecydowanie polecam przestudiowanie klas kolekcji dostępnych w Javie, ponieważ są one bardzo potężne i zapewniają wiele wbudowanych funkcji, które nowicjusze Java zwykle próbują niepotrzebnie przepisywać.
źródło
List<Integer>
zamiastArrayList<Integer>
?Tablice mają stały rozmiar po utworzeniu wystąpienia. Zamiast tego możesz użyć listy.
Autoboxing sprawia, że lista staje się użyteczna jak tablica, możesz umieścić w niej po prostu wartości int:
źródło
Nie zgadzam się z poprzednimi odpowiedziami sugerującymi
ArrayList
, ponieważ nieArrayList
jest to tablica dynamiczna, ale lista obsługiwana przez tablicę. Różnica polega na tym, że nie możesz wykonać następujących czynności:Daje ci wyjątek IndexOutOfBoundsException, ponieważ nie ma jeszcze elementu w tej pozycji, mimo że tablica zapasowa pozwoliłaby na takie dodanie. Musisz więc użyć niestandardowej rozszerzalnej implementacji tablicy, takiej jak sugerowana przez @ randy-lance
źródło
Źródło: jak zrobić tablicę dynamiczną
źródło
Zaleca się używanie listy w przypadku małej skali.
Jeśli masz ogromną liczbę numerów, NIGDY nie używaj listy i autoboxingu,
Lista <liczba całkowita> lista
Dla każdego int, automatycznie tworzona jest nowa liczba całkowita. Przekonasz się, że zwalnia, gdy rozmiar listy rośnie. Te liczby całkowite są niepotrzebnymi obiektami. W takim przypadku użycie szacowanego rozmiaru byłoby lepsze,
źródło
Co powiesz na użycie
List
zamiast tego? Na przykład,ArrayList<integer>
źródło
Nie możesz zmienić rozmiaru tablicy. Możesz jednak utworzyć nową tablicę o odpowiednim rozmiarze i skopiować dane ze starej tablicy do nowej.
Ale najlepszą opcją jest użycie IntList z jacarta commons. ( tutaj )
Działa podobnie jak List, ale zajmuje mniej miejsca i jest bardziej wydajne, ponieważ przechowuje wartości int zamiast przechowywania obiektów opakowujących nad wartościami int (tym jest klasa Integer).
źródło
Odpowiedziałem na to pytanie i nie, nie potrzebujesz arraylisty ani żadnej innej rzeczy, to było zadanie i ukończyłem je, aby tak, tablice mogły zwiększyć rozmiar. Oto link Jak używać tablicy dynamicznej Java, a tutaj jest łącze do mojego pytania, na które odpowiedziałem tablice dynamiczne Java
źródło