Array de objetos ordenado

5 respostas
DirceuSobrinho

é possivel criar um array ordenado de objetos, de acordo com um atributo do objeto?
Se sim alguem poderia me ajudar?

assim me caso eu seguinte

fiz duas classes uma Candidato e outra Eleicao

o objeto criado na candidato com o seguintes atributos: nome, numero, numeroVotos;

ai é possivel armazenar um array, os objetos da candidato, ordenado de acordo com o numero de votos??



Agora estou querendo criar uma eleicao pra vereador

ai na eleicao pra vereador existe aquele caso, coligacao, coeficiente e tal…

ai tou criando agora a classe Coligacao
onde os atributos seriam nomeColigacao, votosColigacao, e um array com os objetos da classe Candidato
e tou tendo dificuldades de criar um metodo pra adicionar candidatos no array da coligacao!

Agora alguem poderia me dar uma luz de como declarar o atributo e como seria o metodo?

vlw

5 Respostas

V

É possivel sim. E existem duas alternativas:

Alternativa 1

:arrow: Criar um array normalmente.
:arrow: Inserir os objetos em qualquer ordem.
:arrow: Ordenar o array.

Alternativa 2:

:arrow: Criar uma coleção onde cada vez que um novo objeto é adicionado, já coloca-se ele de forma que a coleção sempre fique ordenada.

Em ambos os casos, você precisa de uma classe que implementa a interface java.util.Comparator. E o seu objeto Candidato precisa implementar equals.

Exemplo Completo:

import java.util.Comparator;
import java.util.Set;
import java.util.TreeSet;

class Candidato {
	private String nome;

	private int numero;

	private int numeroVotos;

	public Candidato(String nome, int numero, int numeroVotos) {
		this.nome = nome;
		this.numero = numero;
		this.numeroVotos = numeroVotos;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public int getNumero() {
		return numero;
	}

	public void setNumero(int numero) {
		this.numero = numero;
	}

	public int getNumeroVotos() {
		return numeroVotos;
	}

	public void setNumeroVotos(int numeroVotos) {
		this.numeroVotos = numeroVotos;
	}

	public boolean equals(Object obj) {
		Candidato c = (Candidato) obj;
		return c.getNumeroVotos() == this.getNumeroVotos();
	}

	public String toString() {
		return nome + " " + numero + " " + numeroVotos;
	}
}

class CandidatosPorVotoDecrescente implements Comparator {
	public int compare(Object obj1, Object obj2) {
		Candidato c1 = (Candidato) obj1;
		Candidato c2 = (Candidato) obj2;
		return c2.getNumeroVotos() - c1.getNumeroVotos();
	}
}

public class Alternativas {
	public static void main(String[] args) {
		Candidato c1 = new Candidato("A", 25, 1000);
		Candidato c2 = new Candidato("B", 45, 4000);
		Candidato c3 = new Candidato("C", 13, 10000);

		Comparator comparador = new CandidatosPorVotoDecrescente();

		Candidato[] array = new Candidato[] { c1, c2, c3 };
		java.util.Arrays.sort(array, comparador);

		System.out.println("Alternativa 1: ");
		for (int i = 0; i < array.length; i++) {
			System.out.println(array[i]);
		}

		Set arvore = new TreeSet(comparador);

		System.out.println("\nAlternativa 2: ");

		arvore.add(c1);
		System.out.println(arvore);

		arvore.add(c2);
		System.out.println(arvore);

		arvore.add(c3);
		System.out.println(arvore);
	}
}

A saída esperada é:

DirceuSobrinho

vlw, ae vinci
e tou ligado, q vc é petista, o pt ganhou ae, na sua mini eleicao :stuck_out_tongue:
flw

V

Poxa, pensei que a mensagem subliminar não seria notada. :grin:

Bom, na verdade não sou exclusivamente petista. Gosto de muitas propostas deste partido, mas reconheço que eles não são os donos da verdade, donos da ética, etc. Existem muitos bons candidatos do PSDB, Partido Verde, etc.

Mas isso já é outro assunto… :wink:

J

muto bom esse exemplo vinci
:grin:
vou aproveitar tb!!

DirceuSobrinho

Agora estou querendo criar uma eleicao pra vereador

ai na eleicao pra vereador existe aquele caso, coligacao, coeficiente e tal…

ai tou criando agora a classe Coligacao
onde os atributos seriam nomeColigacao, votosColigacao, e um array com os objetos da classe Candidato
e tou tendo dificuldades de criar um metodo pra adicionar candidatos no array da coligacao!

Agora alguem poderia me dar uma luz de como declarar o atributo e como seria o metodo?

vlw

Criado 28 de novembro de 2004
Ultima resposta 6 de dez. de 2004
Respostas 5
Participantes 3