Collections

desculpa a pergunta pode até parecer idiota… :oops: mas Para que e onde usar (Collections )???

Muito provavelmente voce ja usou algo da Collections, apenas nao associou as cosias :slight_smile:

ArrayList, HashMap, LinkedHashMap, LinkedList, HashSet e varias outras sao classes da Collections Framework, ou seja, fornece classes para trabalhar com listas simples, ordenadas, maps ( elementos no formato chave=valor ) e assim por diante.

Por exemplo, com arrays eh possivel ter uma serie de objetos/referencia do mesmo tipo em apenas uma variavel:

String strArray[] = {"Item 1", "Item 2", "Item 3"};

Porem, arrays tem algumas limitacoes, tais como nao ser possivel redimenciona-los; somente podem guardar referencias do mesmo tipo ( ao menos que seja usado um array de Objetc’s, claro ); …

A solucao mais usada nesses casos eh usar um ArrayList, que eh apenas uma lista simples, sequencial e nao ordenada, onde podemos colocar qualquer numero e tipo de referencias, tendo disponivel metodos para inserir itens em determinada posicao, busca por itens, facil remocao e adicao de itens e varias outras utilitdades, que uma rapida consulta no JavaDoc ajudam a esclarecer :slight_smile:

ArrayList minhaList = new ArrayList();
minhaList.add("Item 1");
minhaList.add("Item 3");
minhaList.add("Item 4");

“Mapas” ( HashMap, Hashtable - do java 1 ) sao uteis quando voce precisa associar um nome a algum determinado valor":

HashMap meuMap = new HashMap();
meuMap.put("nome", "Rafael");
meuMap.put("cidade", "Sao Paulo");

Voce pode usar qualquer tipo de objeto, seja no nome da chave quanto no valor dela. Ha dezenas de metodos para iteracao e utilizacao, como acessar uma chave/valor especifico, iterar somente pelas chaves ou somente pelos valores etc etc…

Ha ainda outros tipos e especializacoes, como listas ordenadas, listas encadeadas…
O Paulo esta escrevendo um otimo tutorial exatamente sobre este assunto, deve estar entrando no ar nos proximos dias.

Rafael

1 - colocar objetos em uma lista
2 - ordenar
3 - colocar objetos em uma tabela Hash

4 - o framework de collections é bem poderoso, existem muitos métodos nas classes e também é fácil de percorrer e recuperar os elementos de uma collection

A vantagem que vc não precisaria se preocupar em implementar uma Lista por exemplo, o pessoal da SUN já fez este trabalho.

Você pode encarar as Collections como um array mais flexível.
Suponha que você tenha um array de 10 Objects. Você vai inserindo seus seus valores. Daí quando percebe o array está todo preenchido. E agora, como faço? Crio um novo array com capacidade maior e passo o conteúdo do do 1o. array para o novo? Mas se este novo array lotar de novo? Devo repetir o mesmo processo? E onde coloco os novos elementos? No final do Array ou em alguma outra posição? Então quer dizer que devo ter um marcador para indicar a ultima posição ocupada? E se quiser inserir um elemento no meio do array? Quer dizer que vou ter que deslocar os elementos posteriores a posição onde quero colocar e ainda incrementar o indicador de ultima posição? E se eu quiser um array ordenado? Vou ter que criar um método de ordenação eu mesmo?
:evil:
Como percebeu é muita coisa com que se preocupar. Tanto que podem até te desviar de seu trabalho principal. É para isso que foram inventada a interface Collection e suas implementações como List e Set. Tamanho? Não se preocupe, isso é problema da implementação? Quer adicionar sem se importar onde? É só usar add(). Quer ordenar? Você pode usar um TreeSet ou usar Collections.sort(List). E se eu quiser inserir no meio? Use List.add(pos, objeto) (com Set isso não é possível). E se eu não quiser que haja elementos repetidos. É para isso que Set serve. E se eu quiser um array? use o métod toArray().
:smiley:
Como deu para perceber, as Collections tem muitas propriedades que a tornam interessante.

Espero que isso ajude.