Vectory dwuwymiarowe - jak pobrać wielkość?

0

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 :)

0

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.

0

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>>();

0

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.

0

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.

0

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?

0

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)

0

Spoko, ale jak to zrobić w vektorze dwuwymiarowym?

0

Zacznij wreszcie myśleć. get(row).set(col,newValue)

1 użytkowników online, w tym zalogowanych: 0, gości: 1