Ola Luciano,
Sua duvida na verdade não esta relacionada a linguagem porque esses são conceitos existentes na Computação … o Java facilita disponibilizando objetos implementando esses conceitos …
Arrays :arrow: Posições de memório em sequência, cada posição é acessada por um índice numérico. Muito rápido para armazenamento e acesso desde que a inserção seja sempre no fim e não seja necessário mudar o numero de elementos contidos frequentemente.
Hash Tables :arrow: Estrutura que armazena os dados baseado em um valor “único” (nem sempre é unico, caso seja duplicado ele gera uma lista naquela posição) que indica a posição de armazenamento, é rápido pra recuperar os objetos pois vai direto na posição do danado baseado no seu HashValue, a inserção tb não precisa manipular os outros elementos. Qd você tem um conjunto de dados/objetos que gerem hashvalues distintos é uma boa pedida, caso gerem muitas repetições sua performance e funcionalidade vai cair pacas.
Lists :arrow: usado para armazenar dados ligados por um apontamento entre eles, assim a memoria nao eh sequencial (como no array) e nao eh possivel acessar via indices. Ganha-se em operações de manipulação do meio da sequencia (insercao, remocao).
Vector :arrow: Um tipo especial de array com apenas uma linha
String[] :arrow: Um array de Strings 
Collections eu prefiro nao falar pq nao usaria os termos corretos … mas basicamente eh um array que pode ser acessado via chaves e nao indices.
Alguma besteira? To tentando externalizar o conhecimento uahahaha
Qt ao resultset … que tal usar um Disconnected Resultset ?!? (nem sei se da pra fazer em java, se der eh bem melhor se nao der eu usaria uma Collection)