Temos TreeSet, TreeMap, mas não TreeList na coleção Java. Por quê?


Melhor resposta

Pense nas diferenças entre uma lista, um mapa e um conjunto.

Um mapa é uma estrutura que permite que você procure coisas usando uma chave. Ao projetar pesquisas, você percebe que há muitas comparações de chaves e as pesquisas precisam ser rápidas. Uma árvore acelera o processo de comparação de chaves organizando as chaves em ramos; isso reduz o número de comparações de chaves que precisa ser feito.

Em um Conjunto não há itens duplicados. Portanto, toda vez que você adiciona um item, deve compará-lo aos itens existentes para ver se é uma duplicata. Agora você está de volta ao mesmo problema do Mapa, então você usa uma Árvore para organizar seus itens para reduzir comparações.

Uma Lista só tem ordem, portanto, uma Lista pode ser facilmente projetada de forma que não ” não exigem comparações para obter o próximo item (ou possivelmente o anterior) na ordem da Lista.

Portanto, embora uma árvore possa ajudá-lo a fazer um mapa ou conjunto melhor, ela realmente não pode ajudá-lo a fazer uma lista melhor .

Se você está falando sobre uma lista classificada , onde os itens são inseridos na lista em ordem de classificação, agora você está de volta às comparações para classificar de forma que a Árvore possa ajudar a fazer uma lista classificada.

Resposta

Bem, uma lista é uma lista ordenada coleção – o que significa que você precisa ter a capacidade de acessar aleatoriamente o iº elemento. Se a coleção embaralhar os elementos internamente, a ordem de inserção não será igual à ordem dos elementos na estrutura de dados interna. Portanto, você não pode mais confiar no acesso baseado em índice. Portanto, a Sun não forneceu uma classe SortedList ou TreeList. Você pode conseguir o mesmo usando Collections.sort (..)

O Apache commons-Collections fornece uma classe TreeList ( TreeList (Commons Collections 3.2.1 API) ), mas não é uma lista classificada e é chamada assim porque usa uma estrutura de dados em árvore para armazenar os elementos internamente

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *