Galera estou com um problema de desempenho na minha aplicação quando vou listar os dados do banco, eu estava usando o List e mudei para Collection pois o HashSet é muito mais rápido, porém um meu método mostrarItens não está mais pegando o get para fazer set na table model.
Alguém sabe o que pode ser? Pois se volto para List fica normal.
Primeiro de tudo. De onde você tirou que o HashSet é mais rápido que o List?
O ArrayList é uma lista contínua, um vetorzão. É muito mais rápido percorre-lo que um HashSet. O HashSet só será vantajoso caso você queria eliminar rapidamente itens duplicados de sua coleção, e não permitir que itens duplicados sejam adicionados. Como o próprio nome já diz, e como meu xará ressaltou, o HashSet só funcionará se você tiver o método hashCode implementado corretamente e, para tanto, é também necessário implementar o método equals.
O método get() é lento apenas na LinkedList. Agora, se o objetivo é só percorrer a lista toda, é melhor em ambos os casos usar um for each, que utilizará o Iterator da coleção em questão.
Finalmente, se você tem um problema de performance, antes de sair trocando coisas no seu código, verifique se o problema é realmente lá. Uma ótima ferramenta para isso é o Visual VM: https://visualvm.dev.java.net/
Com ele, você pode medir quanto tempo cada operação do seu código leva, e otimizar no lugar certo. Essa ferramenta é chamada de profiler.
Na verdade, eu nunca vi nenhuma literatura falando sobre HashSet ser mais rápido que uma implementação de List (Array ou LinkedList).
De qualquer forma, acho que o que está acontecendo:
1 - sua implementação de equals e hashCode está errada (por isso voce tem diferenças no get quando muda de Collection)
2 - o que acontece é que no seu banco devem existir campos que estão sendo ignorados pela interface Set, por isso que fica mais rápido …(isso tudo por conta do equals e hashcode errados)
Sim, ele fala que o método contains() do hashset é mais rápido. O artigo deixa bem claro que operações diferentes tem diferente performances, no caso, para percorrer uma lista, o arraylist é mesmo o mais rápido de todos.