Sziasztok, szeretnék egy tömbben LinkedList-eket tárolni.
többféle megoldás is született (1. megoldás forrása):
// 1, típuskényszerítés, működik de úgy érzem kell legyen jobb:
LinkedList<elem>[] elemek_szintenkent = (LinkedList<elem>[]) new LinkedList[100];
// 2 egyszerű, de warning-ot ad, mert a jobboldalt nem
// adtam meg az <elem> típust, és ha megadom nem fordul le
LinkedList<elem>[] elemek_szintenkent = new LinkedList [100];
Hogy kell ezt elegánsan megoldani?
A problémát nem szeretném kikerülni/másképp megoldani, tehát kifejezetten tömbbe akarok láncolt listákat belerakni, és nem más adatszerkezettel megoldani a feladatot.
Köszönöm, Dio
- 1113 megtekintés
Hozzászólások
A java tombok tartalmaznak tipusinformaciot ("reified"-ak) [JLS, 4.7], vagyis tudjak es kikenyszeritik a tombelem tipusat. A generic-ekre ez nem igaz (nincs reification) mivel a tipusinformacio elvesz forditaskor (type erasure) es nem erheto el futasidoben.
Ebbol kovetkezik, hogy nem hozhato letre generikus tipusokbol allo tomb, pl. LinkedList<elem>[], ezert nem fordul le a 2. megoldas, ha megadod az elemtipust.
A generikus tipusok es a tombok kozotti alapveto kulonbseg miatt ezek keverese nem erdemenyez tiszta kodot. A tomb kovarians, a generikus tipusok invariansak.
Idevago olvasmany: Effective Java, Item 25: Prefer lists to arrays. Ahogy Joshua Bloch is is tanacsolja: tomb helyett hasznalj listat. Mivel ezt nem szeretned, marad az 1. megoldasod.
- A hozzászóláshoz be kell jelentkezni
Köszönöm a segítséget, a könyvet el fogom olvasni!
jó éjt!
- A hozzászóláshoz be kell jelentkezni
Szerintem inkabb jobb lenne, ha szeretne a listakat hasznalni. Kenyelmesebb a munka veluk, mint a tombokkel.
Adodik a kerdes: miert nem lehet listakat hasznalni, mi kenyszerit a tombokre?
--
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni