Filas, pilhas e listas

Ae galera desculpe o encomodo mais sou novo com programação java e gostaria de saber qual q diferença entre filas pilhas e listas parecem ser tao parecidos nao sei exatamente quando uso um ou o outro…

alguem poderia postar alguns ex. de um e de outro e me explicar o q se trata por favor…

WIYF (Wikipedia is your friend).

[quote=“jedantas”]Ae galera desculpe o encomodo mais sou novo com programação java e gostaria de saber qual q diferença entre filas pilhas e listas parecem ser tao parecidos nao sei exatamente quando uso um ou o outro…

alguem poderia postar alguns ex. de um e de outro e me explicar o q se trata por favor…[/quote]

List = conjunto de objetos que são acessiveis pela sua posição na lista (ver java.utils.List)

Fila = conjunto de objetos cuja ordem de inserção/remoção de objetos obedece a uma lógica (por exemplo uma fila de mensagens a serem entregues) Normalmente usada como um buffer de “comandos” a serem processados depois (ver java.utils.Queue)

Pilha = conjunto de objetos cuja ordem de inserção/remoção simula o empilhamento desses objetos. Pilhas são Filas em que apenas o objeto “no topo da pilha” pode ser removido e qualquer objeto adicionado vai para o topo da pilha. Também conhecido como File FILO (First In Last Out)
A lógica pode ser inversa, sendo o ultimo elemento a poder ser removido , caso em que será um LIFO (Last in First Out). (ver java.util.Stack)

As implementações destes conceitos estão disponíveis em java, e normalmente usando a mesma classe, é o uso da classe vai determinar que papel ela está fazendo, se lista, se fila ou pilha.

LinkedList pode ser usada em qualquer destas funções, mas para a função de lista pura ArrayList é melhor. Para a funcionalidade de File (Queue) é normalmente necessário sincronismo de threds e portanto outra implementação de Queue pode ser mais apropriada). Uma pilha é um uso especial de uma fila, portanto vale o conceito anterior. Pode ser usada a class Stack, mas ela extende Vector e não Queue, não estando portanto no padrão aconcelhavel para usar encapsulamento. Nesse caso pode ser usado LinkedList sem problema.

pow vlw mesmo…
bom so uma coisa q eu nao entendi… pq tem mais de um tipow de lista e como seria a lista encadeada…

tipow se tivesse q montar uma lista encadeada para armazenar dados reais…

como eu devo fazer?

Olá amigo, existem alguns tipos de Lista que lhe proporciona diferentes tipo de acesso.

Ex: Existe Lista, Dupla ou Simplismente encadeada, Circular. A Duplamente os ponteiros dos nodos apontam um para o outro proporcionando um acesso mais rapido as informações, onde vc pode ir para frente ou para traz, a Circular já da para vc ter uma noção, é como se não existisse inicio ou fim.

Espero que vc tenha conseguido entender :slight_smile:

Abraços

[quote=“jedantas”]pow vlw mesmo…
bom so uma coisa q eu nao entendi… pq tem mais de um tipow de lista e como seria a lista encadeada…

tipow se tivesse q montar uma lista encadeada para armazenar dados reais…

como eu devo fazer?[/quote]

Você pode implementar suas proprias listas, mas a menos que vc saiba muito bem o que está fazendo, é melhor as implementações já existentes. O java vem com um monte globalmente chamdadas de Java Collections Framework. Mas existem outras implementações especiais como a Common Collections.

LinkedList implementa uma lista duplamente encadeada.

Se vc for implementar suas listas, tente fazê-las implementar as interfaces padrão do java. Isso vai aumentar a sua compatibildiade e utilidade.

[quote=“jedantas”]pow vlw mesmo…
bom so uma coisa q eu nao entendi… pq tem mais de um tipow de lista e como seria a lista encadeada…

tipow se tivesse q montar uma lista encadeada para armazenar dados reais…

como eu devo fazer?[/quote]

So para complementar… lista encadeadas, fazem uma certa referencia a ponteiro… e isso não existe no java… quer dizer… voce nao tem ponteiros como no C, C++ ou até mesmo pascal(sim). No java você tem Objetos que armazenam a referencia para um outro objeto…

Outra curiosidade é que você não precisa se preocupar com isso… afinal, existem classes (como a Vector) que aramazena qualquer tipo de Objeto e que pode ser incrementado dinamicamente em tempo de execução… diferente do C que teria que o usar a funcao MALLOC (eu acho) e atribuir um ponteiro… e enfim… O java te facilita MUITO isso…

Entao te recomendo o seguinte,… tirando a possibilidade de você querer aprender isso para fins academicos, nao precisa se preocupar… estuda como você trabalha com classes como Vector, ArrayList, Collection, Iterator… … etc… etc… abraços!