Olá…
Alguem ae tem ideia de como eu poderia fazer isso?
Exemplo…
Lista = Contendo 5 Objetos, com os seguintes atributos…
Nome
Idade
Cidade
Gostaria de Ordenar os objetos desta lista pelo atributo nome? tem como?
Grato…
[]'s
Olá…
Alguem ae tem ideia de como eu poderia fazer isso?
Exemplo…
Lista = Contendo 5 Objetos, com os seguintes atributos…
Nome
Idade
Cidade
Gostaria de Ordenar os objetos desta lista pelo atributo nome? tem como?
Grato…
[]'s
Kra eu to aprendendi esa parada na facul tb, e lá agente fez o seguinte:
1 - coloca os dados num vetor
2- Faz a ordenacao desse vetor com akeles metodos (bolha, merge, etc) utilizando uma busca linear.
mas tb tem que montar um vetor q guarde o indice em q estao os dados para poder exibi-los depois.
é meio complicado, mas é só questão de logica de programacao mesmo.
espero ter ajudado mais do q confundido heheh
abraco
Em Java você já tem implementação do QuickSort (o melhor).
basta fazer:
Collections.sort(minhaLista, meuComparador);
Onde minhaLista é um objeto da classe ArrayList, LinkedList, Vector, etc. E meuComparador é um objeto de uma classe que implementa a interface java.util.Comparator. Você é que tem que implementar essa classe de acordo com o tipo de ordenação que quer fazer dos objetos que estão na coleção.
Um exemplo. Digamos que você tenha uma lista de clientes.
public class Cliente {
private int id;
private String nome
// setters e getters
}
Agora vamos criar um comparador que serve para ordenar os clientes em ordem alfabética pelo nome.
public class MeuComparador implements java.util.Comparator {
public int compare(Object o1, Object o2){
Cliente c1 = (Cliente) o1;
Cliente c2 = (Cliente) o2;
return c1.getNome().compareTo(c2.getNome());
}
}
Já se você quiser ordenar por ordem decrescente de id, o comparador seria assim:
public class MeuComparador2 implements java.util.Comparator {
public int compare(Object o1, Object o2){
Cliente c1 = (Cliente) o1;
Cliente c2 = (Cliente) o2;
return c1.getId() - c2.getId();
}
}
Andre, você fez uma pequena confusão. os algoritmos bolha e merge não são de busca linear. Eles são algoritmos de ordenação. Os algoritmos de busca linear são busca sequencial, busca binária, etc.
Valeu Vinci…Testado e Aprovado
apenas para acrescentar que o Collections tem o metodo:
Collections.reverse(list); que reverte a ordem da lista…
Sera que esta eh a melhor forma para eu ter uma lista em ordem decrescente? Ordena-la normal e depois reverter? nao fica meio POG?
nao achei nenhum metodo que ordenasse de forma decrescente de primeira!
Encotrei este tópico pesquisando por ordenação de arraylists e me foi muito útil.
Como eu faria pra ordenar por dois atributos ? Devo precisar de um laço …
por exemplo… primeiro pela cidade e depois pelo nome do objeto cliente em questão ?
desta forma eu obtive a lista de projetos ordenados pelo nome.
@Override
public int compareTo(Projeto projeto) {
return nomeProj.compareTo(projeto.nomeProj);
}
olha cara não consegui entender muito bem essa parte do Collections, dai eu fiz de outra maneira e funcionou com o método Arrays.sort, passa o que tu quer ordenar para um array, usa o método Arrays.sort, e depois vai inserindo num vetor:
public void ordena(){
double[] peso = new double[animais.size()];
//Passa os valores para um array auxiliar
for(int i = 0; i < peso.length; i++){
peso[i] = animais.get(i).getPeso();
}
//ordena o array
Arrays.sort(peso);
//cria um array auxiliar para ordenar do maior para o menor
double[] maiorMenor = new double[peso.length];
//cria um vector auxiliar para fazer a troca
Vector <Animais> aux = new Vector <Animais> (1,1);
int count = 0;
//ordena em ordem decrescente
maiorMenor = this.inverteOrdem(peso);
//passa os animais ja ordenados em ordem decrescente para o vector auxiliar
while(count < animais.size()){
for(int i = 0; i < animais.size(); i++){
if(animais.get(i).getPeso() == maiorMenor[count])
if(aux.contains(animais.get(i)) == false)
aux.add(animais.get(i));
}
count++;
}
return aux;
}
Esse é um trabalho que tive que fazer, e funciona tambem com String .
pelo que eu entendi, o collections requer que você implemente um método
que faça a comparação dos objetos e este métovo é um override(compareTo)
da classe pai Caparator.
fiz isso e deu certo.
Eu tava precisando ordenar utilizando 2 atributos.
por exemplo …
BH - Amanda
BH - Barnardo
BH - Lucas
…
SP - Amarildo
SP - Bruna
SP - Carlos
…
etc
Dá uma olhada nesse tópico: http://www.guj.com.br/posts/list/54036.java#284273
Explica em detalhes o comparator e o comparable.
Para ordenar por 2 atributos, é só escrever um comparator que leve os dois em consideração:
[code]public int compareTo(Cliente outro) {
int estado = getEstado().compareTo(outro.getEstado());
//Se o estado for diferente, retorna o resultado da comparação por estado
if (estado != 0) return estado;
//Caso contrário, ordena por nome:
return getNome().compareTo(outro.getNome());
}[/code]
Sei que faz tempo, mas muita gente (como eu) ainda tem essas duvidas,
resolvi isso com poucas linhas, usando como base o exemplo do VinyGodoy para vetor
for (int i = 0; i < suaLista.size() - 1; ++i) {
SeuObjeto tmp = suaLista.get(i);
for (int j = i + 1; j < suaLista.size(); ++j) {
SeuObjeto tmp2 = suaLista.get(j);
if (tmp.getAtributo().compareTo(tmp2.getAtributo()) > 0) {
SeuObjeto temp = tmp;
suaLista.set(i, tmp2);
suaLista.set(j, temp);
}
}
}