Jump to content

Duvida em HashMap


jony17
 Share

Recommended Posts

Boa tarde!

Pode-se fazer alguma do genero:

Map<Carro,PecasList> c = new HashMap<Carro,PecasList>();

Em que Carro é uma classe e PecasList é um arraylist de peças do carro por exemplo ?

Se sim, como é que depois posso, recebendo o carro  e uma peça inserir no hashmap ?

Obrigado, espero que me possam ajudar.

cumps

Link to comment
Share on other sites

Sorry, mas a lista de peças deveria ser um atributo do carro, não?

 carro1.getPecasList().add(peca); 

Mas se queres como está no código original, acho que precisas de uma Hashtable, não de um HashMap:

Map<Carro,PecasList> c = new Hashtable<Carro,PecasList>();

❝The idea that I can be presented with a problem, set out to logically solve it with the tools at hand, and wind up with a program that could not be legally used because someone else followed the same logical steps some years ago and filed for a patent on it is horrifying.❞- John Carmack on software patents

A list  of command line apps

Link to comment
Share on other sites

Em que Carro é uma classe e PecasList é um arraylist de peças do carro por exemplo ?

Map<Carro, ArrayList<PecaCarro>> c = new HashMap<Carro, ArrayList<PecaCarro>>();

c.get(/*carro*/); //Devolve ArrayList<PecaCarro>
c.put(/*carro*/, new ArrayList<PecaCarro>());//Adiciona lista vazia

ArrayList<PecaCarro> p = new ArrayList<PecaCarro>()
p.add(new PecaCarro());
p.add(new PecaCarro());
p.add(new PecaCarro());

c.put(/*carro*/, p);//Adiciona lista com 3 elementos

Podes usar estruturas com genéricos dentro de outras estruturas ou classes com genéricos sem problemas, desde que tenhas noção do que estás a colocar lá dentro e respeites sempre o tipo. Não sei se existe algum limite no nível de classes com genéricos que podes usar, nunca testei ou pesquisei, e até agora nunca bati num limite.

Link to comment
Share on other sites

Aproveitando o tópico:

Tenho algo deste género:

public  class Teste{
private int x;
private HashMap<String, Integer> y;

public Teste(Teste cenas){
x=cenas.getX();
y=?;
}
}

Como é que faço no caso da variavel y?

Link to comment
Share on other sites

Podes fazer algo deste género:

public class Teste {
        private int x;
        private HashMap<String,Integer> y;
        
        public Teste() { this(0,new HashMap<String,Integer>()); }
        
        public Teste(int x, Map<String,Integer> y) {
            this.x = x;
            this.y = new HashMap<String,Integer>();
            for (String s : y.keySet())
                this.y.put(s,y.get(s));
        }

        public Teste(Teste t) {
                this.x = t.getX();
                Map<String,Integer> n = t.getY();
                for (String s : n.keySet())
                        this.y.put(s,n.get(s));
        }

        public int getX() { return this.x; }
        public Map<String,Integer> getY() {
            Map<String,Integer> m = new HashMap<String,Integer>();
            for (String s : this.y.keySet())
                m.put(s,this.y.get(s));
            return m;
        }
}
Link to comment
Share on other sites

Podes evitar o ciclo no teu código usando o construtor que recebe um map como entrada

this.y = new HashMap<String,Integer>(y);

Repara que também podes atribuir directamente a variável

this.y = y;

Mas este é um caso pouco recomendado porque se eu alterar a estrutura que usei para passar para o construtor vou destruir os dados do que estão no objecto Teste.

Link to comment
Share on other sites

Se me pudessem esclarecer em mais uma duvida agradecia.

Se eu tiver um HashMap<Carro,PecasList>

Em que Pecaslist e um ArrayList.

Como faco para aplicar um metodo a cada membro do arraylist de todos os carros?

public class PecasList {
    private List<Pecas> listaPecas;

    public List<String> teste(){
        List<String> l = new ArrayList<String>();
        for(Pecas p : this.listaPecas){
            if(p.getFunc() == 0)
                l.add(p.getCodigo());
        }
        return l;        
    }

public class Oficina{
    private Map <Carro,PecasList> ofic;

    public List<String> teste2(){
        List<String> l = new ArrayList<String>();
        /** O que tenho que por aqui para aplicar o metodo teste a cada lista de pecas de cada carro ?? */
        return l;                            
    }
}

Espero que de pa entender o que não percebo.

Obrigado

Link to comment
Share on other sites

Ja tentei fazer como disseste mas da-me sempre NullPointerException  🙂

Na classe de teste tenho isto:

Carro c = new Carro("a","b","c");
PecasList p = new PecasList();
ofic.adicionaCarro(c,p);

E na Oficina:

public void adicionaCarro(Carro c,PecasList pl) {
        this.ofic.put(c,pl);
} 

Nao deveria funcionar ?

Desculpa la estar a ser chato mas nao percebo muito disto  ?

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.