1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Java - HashCode

Discussão em 'Programação' iniciada por luismsantana, 26 de Março de 2013. (Respostas: 6; Visualizações: 886)

  1. Boa noite!

    Comecei à pouco tempo a estudar Java e o estudo à programação orientada a objectos, por isso desculpem qualquer pergunta absurda que possa fazer!

    Estou a debater-me com um problema na parte do hashset ...
    Como faço para, ao percorrer o hashset com um iterador, por exemplo, encontrar o objecto que tenha o field x com o conteudo y (y passado como argumento) ... À imagem do que se faz nos ArrayList:

    Código:
    [COLOR=#000000][FONT=Consolas][B] private[/B][/FONT][/COLOR][COLOR=#000066][FONT=Consolas][B]void[/B][/FONT][/COLOR][COLOR=#000000][FONT=Consolas] xx[/FONT][/COLOR][COLOR=#009900][FONT=Consolas]([/FONT][/COLOR][COLOR=#003399][FONT=Consolas]String[/FONT][/COLOR][COLOR=#000000][FONT=Consolas] yy[/FONT][/COLOR][COLOR=#009900][FONT=Consolas])[/FONT][/COLOR][COLOR=#009900][FONT=Consolas]{[/FONT][/COLOR]
    [COLOR=#000000][FONT=Consolas][B]         for[/B][/FONT][/COLOR][COLOR=#009900][FONT=Consolas]([/FONT][/COLOR][COLOR=#000066][FONT=Consolas][B]int[/B][/FONT][/COLOR][COLOR=#000000][FONT=Consolas] i[/FONT][/COLOR][COLOR=#339933][FONT=Consolas]=[/FONT][/COLOR][COLOR=#CC66CC][FONT=Consolas]0[/FONT][/COLOR][COLOR=#339933][FONT=Consolas];[/FONT][/COLOR][COLOR=#000000][FONT=Consolas]i[/FONT][/COLOR][COLOR=#339933][FONT=Consolas]<[/FONT][/COLOR][COLOR=#000000][FONT=Consolas]x.[/FONT][/COLOR][COLOR=#006633][FONT=Consolas]size[/FONT][/COLOR][COLOR=#009900][FONT=Consolas]([/FONT][/COLOR][COLOR=#009900][FONT=Consolas])[/FONT][/COLOR][COLOR=#339933][FONT=Consolas];[/FONT][/COLOR][COLOR=#000000][FONT=Consolas]i[/FONT][/COLOR][COLOR=#339933][FONT=Consolas]++[/FONT][/COLOR][COLOR=#009900][FONT=Consolas])[/FONT][/COLOR][COLOR=#009900][FONT=Consolas]{[/FONT][/COLOR]
    [COLOR=#000000][FONT=Consolas][B]            if[/B][/FONT][/COLOR][COLOR=#009900][FONT=Consolas]([/FONT][/COLOR][COLOR=#000000][FONT=Consolas]yy.[/FONT][/COLOR][COLOR=#006633][FONT=Consolas]equalsIgnoreCase[/FONT][/COLOR][COLOR=#009900][FONT=Consolas]([/FONT][/COLOR][COLOR=#000000][FONT=Consolas]x.[/FONT][/COLOR][COLOR=#006633][FONT=Consolas]get[/FONT][/COLOR][COLOR=#009900][FONT=Consolas]([/FONT][/COLOR][COLOR=#000000][FONT=Consolas]i[/FONT][/COLOR][COLOR=#009900][FONT=Consolas])[/FONT][/COLOR][COLOR=#000000][FONT=Consolas].[/FONT][/COLOR][COLOR=#006633][FONT=Consolas]nome[/FONT][/COLOR][COLOR=#009900][FONT=Consolas])[/FONT][/COLOR][COLOR=#009900][FONT=Consolas]{[/FONT][/COLOR]
    [COLOR=#666666][FONT=Consolas][I]                 //...[/I][/FONT][/COLOR]
    [COLOR=#009900][FONT=Consolas]             }[/FONT][/COLOR]
    [COLOR=#009900][FONT=Consolas]         }[/FONT][/COLOR]
    [COLOR=#009900][FONT=Consolas]}
    [/FONT][/COLOR]
    Sei como comparar dois objectos, mas o que eu quero é fazer uma pesquisa por field e nao pelos fields todos desse objecto!


    Espero que me tenha conseguido fazer entender ...
    desculpem a confusão
    Abraço
     
  2. nunoemanuel

    nunoemanuel Power Member

    Estás a perguntar como acedes aos atributos de uma classe?

    Se assim for, tens de ter métodos para lhes aceder.
     
  3. não, nao é questão de aceder aos atributos de uma classe simplesmente! eu sei que tenho de ter métodos ... mas o HashSet nao tem um get(int i).(método/field), por exemplo, como no arraylist, para aceder aos fields que estão nos objectos da coleção ...
    Ok, eu adiciono objectos da classe x a uma coleção de HashSet, com o add, e depois, num método qualquer, eu quero fazer com que o programa procure por um objecto da coleção que tenha o field y com o valor "Lisboa" ... como faço para o encontrar se no HashSet só da para comparar objectos e não dá para aceder aos seus atributos (pelo menos eu nao consegui nem encontrei nenhum método na class HashSet com isso) :\
     
  4. nunoemanuel

    nunoemanuel Power Member

    Ou há aqui alguma coisa que me está a falhar ou não sei.

    Se consegues iterar sobre os elementos do HashSet o que te impede de aceder aos atributos do objecto?

    Tens aqui como iterar sobre um HashSet
    Código:
    HashSet hSet = new HashSet();
    // Add some elements to the HashSet:
    hSet.add("This");
    hSet.add(" is");
    hSet.add(" a");
    hSet.add(" test.");
    
    
    // Retrieve an iterator to the hashset:
    Iterator iter = hSet.iterator();
     
    // Extract elements from iterator.
    // Note that the elements may not follow the order in which they
    // are added to HashSet.
    while(iter.hasNext()) 
    {
        System.out.print(iter.next());
        iter.remove();
    }
    
     
  5. olha aqui, o que eu quero fazer é isto ...

    Código:
    public static class pessoa{
            private int bi;
            private String nome;
    
    
            public int getBi() {
                return bi;
            }
    
    
            public void setBi(int bi) {
                this.bi = bi;
            }
    
    
            public String getNome() {
                return nome;
            }
    
    
            public void setNome(String nome) {
                this.nome = nome;
            }
            
            
        }
        
        public static class teste{
            Set<pessoa>pe=new HashSet<pessoa>();
            
            private void adicionaPessoa(String n, int b){
                pessoa p=new pessoa();
                
                p.setBi(b);
                p.setNome(n);
                
                pe.add(p);
            }
            
            private void procuraPessoa(int b){
                Iterator it=pe.iterator();
                
                while(it.hasNext()){
                    if(it.next(). ( ... ) ==b){                                             //*****************************************
                        System.out.println("nome e bi da pessoa encontrada:" + (???)); //nesta secção encontrar o objecto que tem o bi passado
                    }                                                                           //*****************************************
                    else{
                        System.out.println("adeus");
                    }
                    it.next();
                }
            }
    
    
            @Override
            public int hashCode() {
                int hash = 3;
                hash = 97 * hash + (this.pe != null ? this.pe.hashCode() : 0);
                return hash;
            }
    
    
            @Override
            public boolean equals(Object obj) {
                if (obj == null) {
                    return false;
                }
                if (getClass() != obj.getClass()) {
                    return false;
                }
                final teste other = (teste) obj;
                if (this.pe != other.pe && (this.pe == null || !this.pe.equals(other.pe))) {
                    return false;
                }
                return true;
            }
            
            private void inicia(){
                
                adicionaPessoa("claudia", 111111111);
                adicionaPessoa("luis", 13423139);
                adicionaPessoa("luis", 13423139);
                adicionaPessoa("luis", 13423139);
                adicionaPessoa("sdfo", 211322343);
                adicionaPessoa("dskfljd", 123456789);
                
                procuraPessoa(123456789);
            }
    
     
  6. mcog_blaster

    mcog_blaster Power Member

    tenta com
    Código:
     pessoa obj = (pessoa)(iterator.next());if((obj.getBi()  == b) ... 
     
  7. é isso mesmo :D

    muito obrigado :D

    abraço
     

Partilhar esta Página