List + BinarrySearch

6 respostas
J

/

Tenho uma List de Aluno

private List<Aluno> aluno = new ArrayList<Aluno>();
public class Aluno{

	private int numMatricula;
	private String nomeAluno;
	private String cursoAluno;
}

Já esta Ordenada, quero fazer um sistema de BinarrySearch, entrando com o Numero de Matricula que retorna um Aluno;

public Aluno busca(int numMatricula) {

...

}

Como poderia implementar esta busca??

/

6 Respostas

joede.fadel

select nome from tabela where inumMatricula =

M

Olá

Na sua classe Aluno implemente a interface Comparable e utilize o método binarySearch da classe Collections

exemplo:

public class Aluno implements Comparable<Integer> {  
   
     private Integer numMatricula;  
     private String nomeAluno;  
     private String cursoAluno;

     @Override
	public int compareTo(Integer o) {
		return numMatricula.compareTo(o);
	}

  
 }
public Aluno busca(int numMatricula) {  
      
      return alunos.get(Collections.binarySearch(aluno, numMatricula) ;
      
    }

Lembrando que esse código acima pode lançar uma IndexOutOfBoundsException

J

/

Tipow eu ja to usando o metodo CompareTo pra ordenar minha List com Collections.sort. olhe o codigo..

public class Aluno implements Comparable<Aluno>{

	private int numMatricula;
	private String nomeAluno;
	private String cursoAluno;
	
	public String getCursoAluno() {
		return cursoAluno;
	}
	public void setCursoAluno(String cursoAluno) {
		this.cursoAluno = cursoAluno;
	}
	public String getNomeAluno() {
		return nomeAluno;
	}
	public void setNomeAluno(String nomeAluno) {
		this.nomeAluno = nomeAluno;
	}
	public int getNumMatricula() {
		return numMatricula;
	}
	public void setNumMatricula(int numMatricula) {
		this.numMatricula = numMatricula;
	}


	public int compareTo(Aluno a) { 
		if(this.getNumMatricula() > a.getNumMatricula()) return 1;
		if(this.getNumMatricula() < a.getNumMatricula()) return -1;
		else return 0;
	}
}

Usando do jeito que você falou deu erro nao sei se eh por causa do Comparable
ja troquei para Comparable + nao adiantou, continuou dando mesmo erro

usei isto

public int compareTo(int o) {  
		return numMatricula.compareTo(o);  
	}

deu este erro

Cannot invoke compareTo(int) on the primitive type int
M

Então jorgecc,

implemente desta maneira,

public class Aluno implements Comparable<Integer> {    
      
     private Integer numMatricula;    
     ....
   
     @Override  
     public int compareTo(Integer o) {  
         return numMatricula.compareTo(o);  
     }  
 }

deixando Comparable, e mude seu atributo numMatricula de int para Integer

J

Eu fiz desta forma Forma funcionou a busca binaria, mais meu outro metodo deixou de funcionar, meu Collections.sort era assim

public int compareTo(Aluno a) { if(this.getNumMatricula() > a.getNumMatricula()) return 1; if(this.getNumMatricula() < a.getNumMatricula()) return -1; else return 0; }

e o sua Busca Binaria

public int compareTo(Integer o) { return numMatricula.compareTo(o); }

Agora se eu Coloco Comparable Funciona a Ordenaçao e se coloco Comparable Funciona a buscaBinaria

nao tem como funcionar os 2 ao mesmo tempo??

J

/

Consegui resolver o meu problema.
Muito obrigado ao marcuscruz , me ajudou bastante

/

Criado 7 de outubro de 2007
Ultima resposta 9 de out. de 2007
Respostas 6
Participantes 3