Chave primária

Olá

Mais uma vez um iniciante com problemas…
Então, tava eu lá fazendo os exercícios de programação quando me surge o seguinte:

Dentro de uma aplicação de controle de uma academia, teríamos um registro de atletas e lutadores que treinam na academia…
Ou seja:

public class Atleta
{
    private int numero, peso, altura;
    private boolean temEquipe;
    private String nome;
    private Data dataNascimento;
    
    public Atleta(int numero, String nome, int peso, int altura, int dia, int mes, int ano)
    {
        setNome(nome);
        setPeso(peso);
        setAltura(altura);
        setDataNascimento(new Data(dia, mes, ano));
    }
    
    public void setPeso(int peso){this.peso = peso;}
    public void setAltura(int altura){this.altura = altura;}
    public void setNome(String nome){this.nome = nome;}
    public void setDataNascimento(Data dataNasc){this.dataNascimento = dataNasc;}
    public void setTemEquipe(boolean temEquipe){this.temEquipe = temEquipe;}
    
    
    public int getPeso(){return this.peso;}
    public int getAltura(){return this.altura;}
    public int getNumero(){return this.numero;}
    public boolean getTemEquipe(){return this.temEquipe;}
    public String getNome(){return this.nome;}
    public Data getDataNascimento(){return this.dataNascimento;}
}

e também

public class Lutador extends Atleta
{
    private String categoria;
    
    public Lutador(int numero, String nome, int peso, int altura, int dia, int mes, int ano)
    {
        super(numero, nome, peso, altura, dia, mes, ano);
        this.defineCategoria();
    }
    
    public void defineCategoria()
    {
        if(this.getPeso() <= 54) this.categoria = "Pluma";
        else if(this.getPeso() > 54 && this.getPeso() <= 60) this.categoria = "Leve";
        else if(this.getPeso() > 60 && this.getPeso() <= 75) this.categoria = "Meio-leve";
        else this.categoria = "Pesado";
    }
    
    public void setPeso(int peso)
    {
        super.setPeso(peso);
        this.defineCategoria();
    }
    
    public String getCategoria(){return this.categoria;}
}

Ok. Porém o exercício pede que aquele atributo número, seja uma chave primária, ou seja, nenhum atleta terá um número igual ao do outro. Já quebrei minha cabeça pra descobrir como fazer isso, e só consigo pensar em arrays (um array de inteiros para armazenar as chaves já usadas); Só que arrays tem tamanho fixo, teríamos um número de atletas limitados desse jeito…

Enfim, não sei como fazer, se alguém puder ajudar… vlw!

Olá,

Use a Collection Set (ex: Set atletas)

Leia o link que te ajudará : http://www.guj.com.br/java/76488-como-usar-a-interface-list-set-

Abraços
Daniel.

Vocês acham que esta solução também é válida? Usando Map<chave,valor>:

public class AcademiaMap {

    public static void main(String args[]) {

        HashMap<Integer, Lutador> mp = new HashMap<Integer, Lutador>();

        Lutador lutador0 = new Lutador(0, "Lutador 0", 80, 180, 1, 1, 1990);
        Lutador lutador1 = new Lutador(1, "Lutador 1", 80, 180, 1, 1, 1990);
        Lutador lutador2 = new Lutador(2, "Lutador 2", 80, 180, 1, 1, 1990);
        Lutador lutador3 = new Lutador(3, "Lutador 3", 80, 180, 1, 1, 1990);
        Lutador lutador4 = new Lutador(4, "Lutador 4", 80, 180, 1, 1, 1990);
        Lutador lutador100 = new Lutador(100, "Lutador 100", 80, 180, 1, 1, 1990);

        mp.put(lutador0.getNumero(), lutador0);
        mp.put(lutador1.getNumero(), lutador1);
        mp.put(lutador2.getNumero(), lutador2);
        mp.put(lutador3.getNumero(), lutador3);
        mp.put(lutador4.getNumero(), lutador4); // <------------------------------------------------------|
        mp.put(lutador4.getNumero(), lutador4); // tentando inserir o ID (PrimaryKey) de novo. Igual a ---|
        // repare que ela não será impressa
        mp.put(lutador100.getNumero(), lutador100);

        Iterator iterator = mp.keySet().iterator();
        while (iterator.hasNext()) {
            int pk = Integer.parseInt(iterator.next().toString() );
            System.out.println("PrimaryKey: " + pk + " - " + mp.get(pk).getNome() );

        }
    }
}

Saida obtida:

PrimaryKey: 0 - Lutador 0
PrimaryKey: 1 - Lutador 1
PrimaryKey: 100 - Lutador 100
PrimaryKey: 2 - Lutador 2
PrimaryKey: 3 - Lutador 3
PrimaryKey: 4 - Lutador 4

Sim,

Tanto Set como Map são boas soluções, pois evitam duplicação de uma forma ou de outra.

Abraços
Daniel.

Ainda estou estudando o conteudo do link citado juntamente com livro da Kathy. Obrigado!