Implementação de lista que mantém o pedido
Existe um existenteList
implementação em Java que mantém a ordem com base noComparator
?
Algo que pode ser usado da seguinte maneira:
Comparator<T> cmp = new MyComparator<T>();
List<T> l = new OrderedList<T>(cmp);
l.add(someT);
de modo asomeT
é inserido de forma que a ordem na lista seja mantida de acordo comcmp
(Em @andersoj sugestão estou completando minha pergunta com mais uma solicitação)
Também quero poder percorrer a lista na ordem de classificação sem remover os elementos, ou seja:
T min = Const.SMALLEST_T;
for (T e: l) {
assertTrue(cmp.compare(min, e) >= 0);
min = e;
}
deve passar.
Todas as sugestões são bem-vindas (exceto dizer-me para usarCollections.sort
na lista completa não ordenada), porém, eu preferiria algo emjava.*
ou eventualmenteorg.apache.*
já que seria difícil introduzir novas bibliotecas neste momento.
Nota: (UPDATE4) Percebi que implementações desse tipo de lista teriam desempenho inadequado. Existem duas abordagens gerais:
Use estrutura vinculada (tipo de) árvore B ou semelhanteUse array e inserção (com busca binária)Não 1. tem problema com falta de memória de CPU No 2. tem problema com elementos de deslocamento na matriz.
UPDATE2: TreeSet
não funciona porque usa o comparador fornecido (MyComparator
) para verificar a igualdade e, com base nisso, pressupõe que os elementos são iguais e os excluem. Preciso desse comparador apenas para ordenação, não para filtragem de "exclusividade" (já que os elementos por ordem natural não são iguais)
UPDATE3: PriorityQueue
não funciona comoList
(como eu preciso) porque não há maneira de percorrê-lo na ordem em que ele está "classificado", para obter os elementos na ordem de classificação, é necessário removê-los da coleção.
ATUALIZAR:
Pergunta semelhante:
Uma boa lista ordenada para Java
Lista de matriz ordenada em Java