tenho um programa …no qual utiliza hash para adicionar valores, porém não consigo manipular o arrylist, não imagino como adicionar um valor dentro do vetor… alguém poderia me ajudar ??? segue parte do código…a dificuldade é na parte de inserção…tentei inserir…mas está dando erro da maneira que implementei… jah tentei de tudo…alguém poderia me ajudar ???
privateArrayList<Integer>tabHash[];privateinthash(intchave){returnchave%tabHash.length;}publichashClosed(intm){tabHash=newArrayList[m];// cria o vetor de listas com M elementos}publicvoidinserir(intchave){intindice=this.hash(chave);tabHash[indice].add(chave);// ESSA FOI A PARTE QUE TENTEI ADICIONAR VALOR AO VETOR.... TENTEI ADICIONAR UM ÚNICO VALOR É OCORREU ERRO..NÃO ADICONAR..ALGUÉM SABE O MOTIVO ????????????????}
O List precisa precisa de elementos contínuos. Portanto, se seu hash calcular um número grande, você não poderá inseri-lo na lista sem inserir todos os anteriores antes.
felipehts
poderia por favor citar um exemplo…para resolver esse problema… ??? agradeço…
E
entanglement
Você quer criar uma hash table só com um ArrayList?
Isso é possível, mas você precisa estudar um pouquinho da teoria de hash tables antes. Não dá para fazer as coisas na base de “eu acho que…”.
Se você não está nem aí para a teoria e quer somente usar uma Hash Table, então use a java.util.HashMap que está prontinha e testada no JDK.
felipehts
Já sei sobre sua teoria, etc…ate porque conseguir montar esse esqueleto do código ai… o problema está apenas em adicionar o valor em um vetor de ai arraylist, nem é em hash table propriamente… é apenas em adiconar valor que está ocorrendo erro…apartir do momento que eu saber como adicionar um valor …poder ser apaneas 1, por exemplo valor 3…vou conseguir preencher todo o hash tab…alguém poderia me ajudar … dica…como fazer isso … ??? minha dúvida é na parte de adicionar valor ao vetor lista…
OBS: SEI que o código está incompleto… porém essse código foi para teste apenas… tenho que fazer o inserir com comparações, para verificar se a posição é nula ou não…tenho que fazer o pesquisar e o remover… porém para teste inicial …criei apenas esse esqueleto ai… entende… apenas para testa 1 unico valor…para adicionar ao arraylist…porém não fuincionou… assim que funcionar em um valor eu vou criar a lógica para os demais…
E
entanglement
Para você setar o elemento 20 de um arraylist, você deve ter o arraylist já com a dimensão correta (por exemplo, pelo menos 21 elementos se você quer setar a posição 20).
Quando você cria um arraylist, ele tem 0 (zero) elementos, e não é suficiente você simplesmente setar um determinado elemento que ele vai é lhe jogar uma exceção.
Você pode simplesmente adicionar elementos nulos ao arraylist até que ele fique com a posição desejada.
Além disso, você precisa ver se o valor do hash não vai estourar o tamanho do arraylist, mas isso também deve fazer parte do seu algoritmo completo (tratamento de quando as tabelas ficam cheias e precisam ser redimensionadas).
E
entanglement
Outra coisinha - para acessar um ArrayList, não se pode usar a notação [ ] - isso dá até erro de compilação. Você precisa usar .get(), .set() e .add().
A notação [ ] talvez entre no Java 7, mas não sei se já implementaram isso. A última vez que baixei um beta do Java 7 ele não tinha isso ainda incorporado.
felipehts
entendi…se por exemplo quer adicionar a posição 2, as posição anterior dever esta preenchidas para tal…
o problema que eu estou criando um veotr dentro de um arraylist… por isso usei [] … jah tentei por exemplo tabHah.get(indice) etc…não funciona … soh se colocar tabHash[indice].get(); soh assim funcionar…
OBS:
É obrigado o uso do : private ArrayList tabHash[];
Se fosse private ArrayList tabHash ArrayList(); seria muito mais facial de manipular … saberia tranquilo…
E
entanglement
Você está usando a “programação orientada a zero erros de compilação” (que normalmente se faz quando você não entende o que está ocorrendo), o que no seu caso não vai funcionar.
No seu caso você não deveria ter usado em momento nenhum o “[ ]”.
Vou mostrar o que deve ser feito então.
importjava.util.*;classMeuHash{privateList<Integer>tabHash;publicMeuHash(){tabHash=newArrayList<Integer>();}publicvoidhashClosed(intm){tabHash.clear();for(inti=0;i<m;++i){tabHash.add(null);// deixando a tabela preenchida com null e com 'm' posições}}publicinthash(intchave){returnchave%tabHash.size();}publicvoidinserir(intvalor){intindice=hash(valor);tabHash.set(indice,valor);}publicStringtoString(){StringBuildersb=newStringBuilder();sb.append("{");for(inti=0;i<tabHash.size();++i){sb.append(tabHash.get(i)).append(", ");}sb.append("}");returnsb.toString();}}classTesteHash{publicstaticvoidmain(String[]args){MeuHashmh=newMeuHash();mh.hashClosed(20);mh.inserir(10);mh.inserir(20);mh.inserir(5);mh.inserir(277);System.out.println(mh);}}
E
entanglement
Espera um pouco. O professor mandou você fazer uma hash table com vários arrays? Isso também é possível, e vou mostrar como se faz.