Como criar uma lista de objetos únicos / distintos (sem duplicatas) em Java?
No momento estou usando HashMap<String, Integer>
para fazer isso, pois a chave é sobrescrita e, portanto, no final podemos obter HashMap.getKeySet()
qual seria única. Mas tenho certeza de que deveria haver uma maneira melhor de fazer isso, pois a parte do valor é desperdiçada aqui.
fonte
Eu quero esclarecer algumas coisas aqui para o pôster original que outros fizeram alusão, mas não declararam explicitamente. Quando você diz que deseja uma Lista Única, essa é a própria definição de um Conjunto Ordenado. Algumas outras diferenças importantes entre a interface Set e a interface List são que List permite que você especifique o índice de inserção. Portanto, a questão é: você realmente precisa da interface List (ou seja, para compatibilidade com uma biblioteca de terceiros, etc.), ou você pode reprojetar seu software para usar a interface Set? Você também deve considerar o que está fazendo com a interface. É importante encontrar elementos por seu índice? Quantos elementos você espera em seu set? Se você vai ter muitos elementos, o pedido é importante?
Se você realmente precisa de uma List que tem apenas uma restrição exclusiva, existe a classe Apache Common Utils org.apache.commons.collections.list.SetUniqueList que fornecerá a interface List e a restrição exclusiva. Veja bem, isso quebra a interface de lista. No entanto, você obterá um melhor desempenho com isso se precisar pesquisar a lista por índice. Se você pode lidar com a interface Set e tem um conjunto de dados menor, LinkedHashSet pode ser uma boa opção. Depende apenas do design e da intenção do seu software.
Novamente, existem certas vantagens e desvantagens em cada coleção. Algumas inserções rápidas, mas leituras lentas, algumas têm leituras rápidas, mas inserções lentas, etc. Faz sentido gastar uma boa quantidade de tempo com a documentação das coleções para aprender completamente sobre os detalhes mais sutis de cada classe e interface.
fonte
Use
new HashSet<String>
um exemplo:fonte
Você pode apenas usar um
HashSet<String>
para manter uma coleção de objetos exclusivos. Se osInteger
valores em seu mapa são importantes, então você pode usar ocontainsKey
método de mapas para testar se sua chave já está no mapa.fonte
HashSet<String>
(ou) qualquerSet
implementação pode fazer o trabalho para você.Set
não permite duplicatas.Aqui está o javadoc para HashSet.
fonte
Não sei o quão eficiente isso é, porém funcionou para mim em um contexto simples.
fonte
Você pode querer usar uma das classes de implementação da
java.util.Set<E>
Interface, por exemplo,java.util.HashSet<String>
classe de coleção.fonte