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?
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…
Você não terá um método sort no ArrayList, deve usar outra estrutura de dado.
Tentei fazer assim, mas não deu certo.
[code]
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);
}[/code]
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);
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 []
É pelo que eu entendi eu tinha que fazer o método compara na classe Item.
Mas mesmo assim não funcionou.
[code]
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;
}
}[/code]
é 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…
Obrigada. Já tinha visto esse link, mas achei que o nome do método não influenciava.
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
[code]
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 );
}
}[/code]
[code]
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;
}
} [/code]
[code]
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);
}[/code]
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() ???
Se você não gostar do link do Paulo Silveira, pode também ler esse post do Mantú: