Ordenar arrayList

11 respostas
F

Tenho uma classe Item que tem como atributo um inteiro valor e uma classe Nodo que possui como atributo um arrayList de Item. Gostaria de adicionar os itens nesse arrayList de forma ordenada. Existe algum método que faça isso?

11 Respostas

adriano_si

Listas ordenam os elementos na ordem em que são adicionados, onde o último elemento adicionado é o último da Lista…

Procure na API sobre a interface Collections e acharás um método utilitário que faz exatamente o que você quer…

Abs [] e bons estudos…

lordtiago

Você não terá um método sort no ArrayList, deve usar outra estrutura de dado.

F

Tentei fazer assim, mas não deu certo.

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;


public class NodoB{
	
	 private List<Item> listaItens = new ArrayList<Item>();
	 private List<NodoB> listaFilhos = new ArrayList<NodoB>();
	 
	 
	 
	 
	 public NodoB(List<Item> listaItens, List<NodoB> listaFilhos) {
		super();
		this.listaItens = listaItens;
		this.listaFilhos = listaFilhos;
	}

	 public NodoB() {
		super();
	}



	/*
	  * Se o nodo não tiver filhos retorna verdadeiro.
	  * Caso contrário retona falso
	  */
	 public boolean ehFolha() {
		 if ( this.listaFilhos.isEmpty()) 	return true;
		 return false;
	 }
	
	 /*
	  * Retorna a quantidade de itens que o nodo possui
	  */
	public int qtItens (){
		return this.listaItens.size();
	}
	
	/*
	 * Insere um item no nodo
	 */
	public void insereItens ( Item item ) {
		this.listaItens.add ( item ) ;
		}
	
	/*
	 * Ordena os itens do nodo
	 */
	public void ordena () {
		Collections.sort(listaItens);

	}
adriano_si

E se ele precisar de uma lista ???

List<Integer> lista = new ArrayList<Integer>();
		lista.add(4);
		lista.add(2);
		lista.add(1);
		for(Integer i: lista)
			System.out.println(i);
		Collections.sort(lista);
		for(Integer i: lista)
			System.out.println(i);
adriano_si

Cuidado… tem algo bem peculiar no Collections.sort()

Você precisa fazer algo com suas classes Item e NodoB

Revise a API novamente e verá que algo está faltando…

Abs []

F

É pelo que eu entendi eu tinha que fazer o método compara na classe Item.

Mas mesmo assim não funcionou.

public class Item implements Comparable{

	private int valor;

	public Item ( int valor ){
		this.valor = valor;
	}




	public int getValor() {
		return valor;
	}


	public int compara(Comparable object) {
		Item item = ( Item ) object;
		if ( this.valor  < item.valor ) 	return  -1;
		else if ( this.valor > item.valor )		return 1; 	
		return 0;
	}

}
adriano_si

é porque não é compara … o Comparable tem um padrão de nomenclatura… você deve sobrescrever o método compareTo()

Veja abaixo:

public class EntidadeTesteLista implements Comparable<EntidadeTesteLista> {
	
	private Integer id;
	
	public EntidadeTesteLista(Integer id){
		this.id = id;
	}
	
	public void setId(Integer id) {
		this.id = id;
	}

	public Integer getId() {
		return id;
	}

	public int compareTo(EntidadeTesteLista o) {
		if(this.id < o.getId()) return -1;
		if(this.id > o.getId()) return 1;
		return 0;
	}
}

Agor a classe de teste ficou assim

List<EntidadeTesteLista> lista = new ArrayList<EntidadeTesteLista>();
		EntidadeTesteLista l1 = new EntidadeTesteLista(5);
		EntidadeTesteLista l2 = new EntidadeTesteLista(8);
		EntidadeTesteLista l3 = new EntidadeTesteLista(1);
		lista.add(l1);
		lista.add(l2);
		lista.add(l3);
		for(EntidadeTesteLista i: lista)
			System.out.println(i.getId());
		Collections.sort(lista);
		for(EntidadeTesteLista i: lista)
			System.out.println(i.getId());

E pra sanar sua dúvida, coloque “como usar Comparator +Sort” no Google e você chegaria ao seguinte Link do Paulo Silveira: http://blog.caelum.com.br/ordenando-colecoes-com-comparable-e-comparator/

Abs[] e sucessos nos estudos… Na próxima dá uma pesquisada melhor…

F

Obrigada. Já tinha visto esse link, mas achei que o nome do método não influenciava.

F

Troquei o nome do método, mesmo assim não funcionou.
O eclipse acusa um erro que diz que o método sort não é aplicável para este tipo de argumento

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;


public class NodoB{

	private List<Item> listaItens = new ArrayList<Item>();
	private List<NodoB> listaFilhos = new ArrayList<NodoB>();




	public NodoB(List<Item> listaItens, List<NodoB> listaFilhos) {
		super();
		this.listaItens = listaItens;
		this.listaFilhos = listaFilhos;
	}

	public NodoB() {
		super();
	}



	/*
	 * Se o nodo não tiver filhos retorna verdadeiro.
	 * Caso contrário retona falso
	 */
	public boolean ehFolha() {
		if ( this.listaFilhos.isEmpty()) 	return true;
		return false;
	}

	/*
	 * Retorna a quantidade de itens que o nodo possui
	 */
	public int qtItens (){
		return this.listaItens.size();
	}

	/*
	 * Insere um item no nodo
	 */
	public void insereItem ( Item item ) {
		this.listaItens.add ( item ) ;
	}
	
	public void removeItem (Item item){
		this.listaItens.remove(item);
	}

	/*
	 * Ordena os itens do nodo
	 */
	public void ordena () {	
		Collections.sort(listaItens);

	}

	/*
	 * Retorna o item com o indice informado
	 */
	public Item retornaItem (int indice){
		return this.listaItens.get( indice );
	}




}
public class Item implements Comparable{

	private int valor;

	public Item ( int valor ){
		this.valor = valor;
	}




	public int getValor() {
		return valor;
	}


	public int compareTo(Item o) {
		if ( this.valor < o.getValor())	return -1;
		if ( this.valor > o.getValor()) return 1;
		return 0;
	}




	

}
public interface Comparable {
	
	
	/*
	 * Retorna 0 se os elementos forem iguais
	 * Retorna 1 se elemento passado como parâmetro for menor
	 * Retorna -1 se o elemento passado como parâmetro for maior
	 */
	public int compareTo(Item o);
		
	

}
adriano_si

Cara, você não está lendo a API que estou passando pra você, assim fica difícil…

Você não precisa criar a interface Comparable… Ela já existe… e é esse Comparable do java.lang.Comparable (acho que é isso) que o sort usa pra ordernar seus elementos…

Outro detalhe é: onde você chama o método ordena() ???

ViniGodoy

Se você não gostar do link do Paulo Silveira, pode também ler esse post do Mantú:

Criado 3 de março de 2011
Ultima resposta 4 de mar. de 2011
Respostas 11
Participantes 4