onde vc nesse formato de armazenagem vc pode usar uma mesma chave num hashmap onde a mesma não retorna um unico objeto | valor mas cada chave armazene
tendo em vista que a o método de entrada de dados do hashmap é
publicObjectput(Objectkey,Objectvalue)
e dai é soh criar uma classe que te facilite a manipulação desse modelo
de dado e dai vc poderá utilizar para uma mesma chave recuperar mais de um valor
compilei agora o codigo (http://paste.b1n.org/tl ) com a opção
javac -Xlint e o seguinte aviso foi mostrado:
warning: [unchecked] unchecked call to addElement(E) as a member of the raw type
Eu tenho que declara o tipo de dados do Vector, é isso ?
E
ErkoPJ
eae blz?
bom o tipo do vector é Object
e minha proposta foi a seguinte como a classe a seguir
importjava.util.*;/** * @author Erko Bridee * * Tido de dados que utiliza um identificador como indice de uma coleção de objetos */publicclassArrayText{privateHashtablehashTable;/** Creates a new instance of ArrayText */publicArrayText(){this.hashTable=newHashtable();}/* * Definição de métodos de acesso a objetos da classe */publicvoidsetArrayText(Hashtableht){this.hashTable=ht;}publicHashtablegetArryText(){returnthis.hashTable;}/* * Métodos de serviços da classe */// método para adicionar algum valorpublicvoidadd(Objectkey,Objectvalue){/* * Verificando se já existe a chave * -> Caso exista recupera a coleção de objetos e adiciona um novo * valor a essa coleção de objetos * -> Caso contrário adiciona a nova chave e cria uma nova coleção de * objetos, inserindo a esta o primeiro valor repassado */if(this.hashTable.containsKey(key)){Vectorv=(Vector)this.hashTable.get(key);v.add(value);}else{VectorObjectCollection=newVector();ObjectCollection.add(value);this.hashTable.put(key,ObjectCollection);}}// remove todos os objetos relacionados a chave repassadapublicvoidremove(Objectkey){this.hashTable.remove(key);}// método para remover um objeto específico da coleção de objetospublicvoidremove(Objectkey,Objectvalue){Vectorv=(Vector)this.hashTable.get(key);v.removeElement(value);}// método que retorna a coleção de objetos quando solicitadopublicVectorget(Objectkey){return(Vector)this.hashTable.get(key);}// retorna um elemento específico da coleção de objetospublicObjectget(Objectkey,intelement){return((Vector)this.hashTable.get(key)).elementAt(element);}// método que retorna um array de objetospublicObject[]getArray(Objectkey){return((Vector)this.hashTable.get(key)).toArray();}/* * método para alterar um valor da coleção de uma determinada chave * altera todos os antigos valores oldValue por newValue */publicvoidreplace(Objectkey,ObjectoldValue,ObjectnewValue){// recupera a coleçãoVectorv=(Vector)this.hashTable.get(key);/* * Armazena os indices da coleção que serão alterados */VectorpositionsToReplace=newVector();for(intcount=0;count<v.size();count++){if(v.get(count).equals(oldValue)){positionsToReplace.add(newInteger(count));}}/* * recupera os indices dos valores que deverão ser alterados * e realiza a substituição dos valores antigos pelo novo */for(inti=0;i<positionsToReplace.size();i++){intindex=Integer.parseInt(positionsToReplace.get(i).toString());v.set(index,newValue);}}publicStringtoString(){Stringout="";Enumerationenumeration=this.hashTable.keys();out+="\n";out+="+--------------------------------------------------------------+\n";out+="| Relatório de teste da classe |\n";out+="+--------------------------------------------------------------+\n";while(enumeration.hasMoreElements()){Objectkey=enumeration.nextElement();Vectorvector=(Vector)this.hashTable.get(key);out+="\nKey: "+key.toString();for(inti=0;i<vector.size();i++){out+="\n value: "+vector.get(i).toString();}}out+="\n\n";out+="+--------------------------------------------------------------+\n";out+="| Fim do Relatório de teste da classe |\n";out+="+--------------------------------------------------------------+\n";returnout;}/* * Método principal de teste da classe */publicstaticvoidmain(String[]args){ArrayTextarrayText=newArrayText();arrayText.add("um","primeiro");arrayText.add("um","segundo");arrayText.add("dois","primeiro do segundo");arrayText.add("dois","segundo do segundo");arrayText.add("dois","terceiro do segundo");System.out.print(arrayText.toString());arrayText.replace("um","segundo","segundo ALTERADO");System.out.print(arrayText.toString());arrayText.remove("dois","terceiro do segundo");System.out.print(arrayText.toString());arrayText.remove("um");System.out.print(arrayText.toString());}}
espero ter ajudado, qq ideia ai ou duvida é soh falar
[]´s
H
HSNPJ
hrober, essa mensagem é dada pelo compilador do Java 5.0, e quer dizer que embora seu código rode bonitinho, é preferível usar o Vector “genérico” do Tiger. Leia o tutorial da Sun sobre genéricos para saber direitinho do que se trata, mas no seu caso, é porque em vez de criar um lista de Objects e ter que fazer a conversão para pegar o objeto, você pode criar uma lista que aceita e lhe retorna só os tipos corretos de instância. Então, em vez de escrever:
Hashtableht=newHashtable();Vectorv=newVector();v.add("value1");v.add("value2");v.add(newObject());// permitido, Vector armazena objetosht.add("key",v);Vectorv2=(Vector)ht.get("key");Strings=(String)v2.get(2);// pau em tempo de execução
Você escreve isto:
// Só aceita Strings de chave, e Vectors de Strings de valorHashtable<String,Vector<String>>ht=newHashtable<String,Vector<String>>();Vector<String>v=newVector<String>();// Só aceita Stringsv.add("value1");v.add("value2");v.add(newObject());// pau na compilação, o Vector v só aceita Stringsht.add("key",v);Vector<String>v2=ht.get("key");// Note que não precisa de castingStrings=v2.get(1);// Novamente, nada de casting
É bem legalzinho, embora tenha algumas propriedades não intuitivas. Leia o tutorial para entender melhor.