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.