Van TreeSet, TreeMap, de a TreeList nincs a Java gyűjteményben. Miért?


Legjobb válasz

Gondoljon a listák, a térképek és a halmazok közötti különbségekre.

A Térkép egy olyan struktúra, amely lehetővé teszi a dolgok megkeresését egy kulcs segítségével. Amikor kereséseket tervez, rájön, hogy sok kulcs-összehasonlításra van szükség, és a kereséseknek gyorsaknak kell lenniük. Egy fa felgyorsítja a kulcs-összehasonlítási folyamatot a kulcsok ágakba szervezésével; ez csökkenti a kulcs-összehasonlítások számát. el kell készíteni.

Egy készletben nincsenek ismétlődő elemek. Tehát minden egyes elem hozzáadásakor össze kell hasonlítania a meglévő elemekkel, hogy lássa, nem duplikál-e. Most ugyanarra a problémára tér vissza, mint a Térkép, tehát egy fa segítségével rendezheti elemeit az összehasonlítások csökkentése érdekében.

A listának csak sorrendje van, így a lista könnyen megtervezhető úgy, hogy ne ” A következő (vagy esetleg előző) elemhez a Lista sorrendben összehasonlításra nincs szükség.

Tehát bár egy fa segíthet jobb térkép vagy halmaz elkészítésében, ez nem igazán segíthet jobb lista elkészítésében. .

Ha rendezett listáról beszél, ahol az elemek rendezési sorrendben kerülnek be a listába, akkor most visszatér az összehasonlításokhoz rendezéshez, így a fa segíthet a rendezett lista elkészítésében.

Válasz

Nos, a lista rendezett gyűjtemény – ami azt jelenti, hogy képesnek kell lennie arra, hogy véletlenszerűen elérje az i-ik elemet. Ha a gyűjtemény belül keveri az elemeket, akkor a beszúrási sorrend nem egyezik meg a belső adatstruktúra elemeinek sorrendjével. Így már nem támaszkodhat indexalapú hozzáférésre. Ezért a Sun nem adott meg SortedList vagy TreeList osztályt. Ugyanezt elérheti a Collections.sort (..) használatával.

Az Apache commons-gyűjtemények biztosítanak egy TreeList osztályt ( TreeList (Commons Collections 3.2.1 API) ), de ez nem rendezett lista, és azért hívják, mert egy fa adatstruktúrát használ az elemek belső tárolásához

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük