Witam,
utworzyłem sobie wektor dwuwymiarowy:
Vector<Vector<Object>> powierzchnia2 = new Vector<Vector<Object>>();
Muszę zastąpić nim, kiedyś utworzoną tablicę, która niestety, ze względu na ograniczoną wielkość, nie nadaj się do mojej gry :P
no i teraz stanąłem na tym:
tab[0].length //tab to tablica
Ta linijka pobiera wielkość wiersza z tablicy. Muszę ją teraz przekształcić na pobieranie wiersza z wektora.
Niestety ten sposób nie działa :/
tab[0].size(); //w tym przypadku tab to wektor
I tu jest pytanie: jak pobrać wielkość wiersza tego wektora? jak w ogóle pobrać dane, mając współrzędne (czyli odpowiednik tablicowego tab[liczba][liczba])
Z góry dziękuję i pozdrawiam :)
I tu jest pytanie: jak pobrać wielkość wiersza tego wektora? jak w ogóle pobrać dane, mając współrzędne (czyli odpowiednik tablicowego tab[liczba][liczba])
Żartujesz? wektor.get(x).get(y). Wielkość pierwszego wiersza: wektor.get(0).size().
I zastanów się nad ArrayListą. Od Vectora różni się przede wszystkim tym, że nie jest synchronizowana, a więc w wielu przypadkach będzie działać znacznie szybciej (oprócz przypadków, w których lock elision będzie miał okazję zadziałać).
Możesz zrobić coś takiego:
List<List<Object>> lista2W = new ArrayList<List<Object>>();
for (int i = 0; i < 10; i++)
lista2W.add(new ArrayList<Object>());
Dzięki temu, że Vector implementuje interfejs List, mógłbyś potem spokojnie podmieniać między ArrayListą i Vectorem w przyszłości, w zależności od potrzeby synchronizacji.
Dzięki.
A dlaczego nie mogę ustawić typu wektora na int? W C++ tak się dało:
Vector<Vector<int>> powierzchnia2 = new Vector<Vector<int>>();
Vectory mogą tylko trzymać obiekty, użyj po prostu klasy Integer. Możesz wrzucać spokojnie zwykłe inty, zostaną przerobione na Integer (autoboxing). Odczytane obiekty Integer zachowują się tak jak zwykły int.
Java używa type-erasure i wszelka parametryzacja genericsów nie ląduje w bajtkodzie. Vector bez parametryzacji jest równy Vector<Object>, a więc może przechowywać tylko instancje klas dziedziczących po Object. Z tego wszystkiego wynika, że w Javie nie da się sprarametryzować genericsów czymś co nie dziedziczy po Object.
Szablony w C++ działają na zupełnie innej zasadzie niż genericsy w językach zarządzanych - w C++ szablony są rozwijane w trakcie kompilacji, tzn preprocesor wypluwa dodatkowy specjalizowany kod, natomiast użycie genericsów w Javie czy C# nie generuje dodatkowego bajtkodu.
Jeszcze jedno:
czy w ArrayListach można zmienić zawartość konkretnej częsci wektora?
Czyli chciałbym np. mam kilka obiektów w mojej liście, jedna z nich ma wartość 1, ale chciałbym ją zamienić na 3.
Czy żeby to zrobić, muszę usunąć konkretną komórkę i wstawić coś na nowo?
Wyczytanie tego z dokumentacji zabrałoby ci 100x mniej czasu niż napisanie posta na forum. Metoda set w interfejsie List:
http://docs.oracle.com/javase/6/docs/api/java/util/List.html#set(int, E)
Spoko, ale jak to zrobić w vektorze dwuwymiarowym?
Zacznij wreszcie myśleć. get(row).set(col,newValue)