Ordenação em Ordem Alfabetica

E ai galera.
Tô tendo que fazer um trabalho, que é um dos itens é o seguinte:
Tenho que incluir numa Lista , nodos , que tem como parametro o nome da pessoa e o telefone.
Só que tem que ser ordenado por ordem alfabetica (nome da pessoa)… ou seja, tenho que incluir na lista, mas já incluir o nodo no lugar certo… como que eu faço isso ?
Alguem pode me ajudar ?
Obrigado !

Você precisa de um método de ordenação em tempo de inserção.

Sempre ao inserir uma pessoa na lista já a deixe ordenada, e depois da inserção reordene a lista. Dependendo da classe que você está trabalhando (ArrayList, Vector, etc), este método já está implementado.

Estou apenas dando um palpite, não conheço muito a parte de Estrutura de Dados em Java mas eu começaria procurando sobre métodos de ordenação em cada classe que pode implementar uma lista ok? :wink:

Flwz :slight_smile:

Certo.

Mas tipo assim…
estou trabalhando com listas, não é Vector, nem Arraylist e tal…
é Lista duplamente encadeada mesmo.
que tem os campos “proximo”, “anterior”… etc.
Como que eu faço pra ordenar logo que eu vou inserir.
tem algo que “testa” e insere no lugar certo ?
Obrigado

entendo
Neste caso vc deve implementar um método que ordene sua lista.
Procure pesquisar a respeito de ordenação (algoritmos de ordenação http://pt.wikipedia.org/wiki/Algoritmo_de_ordena%C3%A7%C3%A3o).

Não vou dizer qual o mais adequado deles pois a ordenação envolve conhecimento prévio do tamanho da sua lista, tamanho do registro (neste caso, objetos) a serem deslocados, e outras coisas.

Mas caso tenha algum problema fiz um trabalho semelhante e posso te ajudar de alguma outra forma :wink:

Até mais :slight_smile:

Opa.
tipo… eu tava vendo…
tem a interface comparable, que segundo o q eu entendi, funciona pra comparar objetos e tal…
alguem sabe como funciona mais ou menos ?
é que eu tou meio perdido :(…
obrigado!

Pelo que entendi vc vai implementar sua lista na mão ok?
Que tipo de objeto ela vai armazenar?

Vamos supor que sejam objetos da classe Pessoa.

Então vc vai ter

[code]
public class Pessoa implements Comparable< Pessoa > {
// outros membros de Pessoa…

public int compareTo(Pessoa p) {
        // olhe na documentação os requisitos para a implementação do método compareTo
}

}[/code]

Feito isso, na implementação de sua lista, sempre quanto vc for inserir um item, vc tem que percorrer a lista inteira, desde a primeira posição, até encontrar o local adequado para o novo obvjeto ser inserido, usando assim o método compareTo

if ( objetoASerInserido.compareTo(objetoAtualNaLista) for igual a alguma coisa) { //insere em algum lugar }

Deu para entender?

Falow!

Outra coisa, para implementar a busca na lista vc pode implementar um método binarySearch para que a busca seja mais rápida (mas vc tem que ter o método compareTo para saber para onde o binarySearch deve caminhar.

Lembrando que já existe tudo isso no Java, mas como vc tem que implementar na mão vc vai precisar fornecer essas funcionalidades.

Vc já deve ter aprendido o binarySearch na disciplina (busca binária).

Falow!

A, mais uma coisa, vc vai precisar indexar sua lista se for usar a busca binária.

O compareTo vc pode também criar sua própria regra de retorno, creio que omais usual seja retornar -1 se um objeto for “menor” que o outro, 0 se for igual e 1 se for maior. Ai dentro do método vc decide quais campos de Pessoa que devem dizer se a pessoa é maior, menor ou igual. Lembrando que se vc for usar o nome como essa chave de comparação, a classe String já possui o método compareTo implementado.

Falow!

Oi, jah pensou em usar o HashMap?
O Hash Map eh, na minha opnião, a melhor técnica pra rcuperar informações. é formado por <chave, valor> e faz tipo um mapa das tuas informações.

http://java.sun.com/j2se/1.4.2/docs/api/ descrição pela API

http://www.roseindia.net/javatutorials/javahashmap.shtml tutorial sobre o HashMap