V kolekci Java máme TreeSet, TreeMap, ale ne TreeList. Proč ano?


Nejlepší odpověď

Přemýšlejte o rozdílech mezi seznamem, mapou a množinou.

Mapa je struktura, která umožňuje vyhledávat věci pomocí klíče. Když navrhujete vyhledávání, uvědomíte si, že existuje spousta klíčových srovnání a vyhledávání musí být rychlé. Strom zrychluje proces porovnávání klíčů uspořádáním klíčů do větví; tím se snižuje počet klíčových srovnání, která je třeba provést.

V sadě nejsou duplicitní položky. Takže pokaždé, když přidáváte položku, musíte ji porovnat se stávajícími položkami, abyste zjistili, zda je duplikát. Nyní se vracíte ke stejnému problému jako Mapa, takže pomocí stromu uspořádáte své položky, abyste omezili srovnání.

Seznam má pouze řazení, takže seznam lze snadno navrhnout tak, že to neudělá “ Aby bylo možné získat další (nebo případně předchozí) položku v pořadí seznamu, nevyžadují srovnání.

Takže zatímco strom vám může pomoci vytvořit lepší mapu nebo sadu, ve skutečnosti vám nemůže pomoci vytvořit lepší seznam .

Pokud hovoříte o seřazeném seznamu, kde jsou položky vkládány do seznamu v pořadí řazení, nyní jste zpět k porovnání pro třídění, aby strom může pomoci při vytváření seřazeného seznamu.

Odpovědět

Seznam je uspořádaný kolekce – což znamená, že musíte mít možnost náhodně přistupovat k i-tému prvku. Pokud kolekce interně zamíchá prvky, pořadí vložení nebude stejné jako pořadí prvků ve struktuře interních dat. Už se tedy nemůžete spoléhat na přístup založený na indexu. Sun proto neposkytl třídu SortedList ani TreeList. Totéž můžete dosáhnout pomocí Collections.sort (..)

Commons-collections Apache neposkytují třídu TreeList ( TreeList (Commons Collections 3.2.1 API) ), ale nejedná se o seřazený seznam a nazývá se tak proto, že k vnitřnímu ukládání prvků používá stromovou datovou strukturu

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *