Seja bem vindo ao Fórum do JavaFree.org
Aqui você irá encontrar respostas para TUDO o que você precisa sobre java.
Deseja participar? Crie sua conta ou efetue seu login
Tô precisando do seguinte: um "ArrayList" que tenha o seguinte comportamento:
=> Ele tem que funcionar como um HashTable, ou seja, ele tem que implementar chave e valor.
=> Ele tem que permitir que eu coloque valores repetidos nas chaves.
=> Ele tem que ordenar essa lista pelas chaves automaticamente.
=> Ele tem que permitir que eu busque os dados nessa lista por intervalo. Por exemplo: lista.obterdados(10,45). No caso, esse método me retornaria uma lista com todos os elementos, cujo o valor d chave esteja entre 10 e 45.
Para alguns comportamentos desses, eu até achei classes que me ajudariam na API (HashSet, por exemplo), mas não tem tudo que eu quero.
Procurei na API da JAVA, mas confesso que não tive muita paciência para procurar.
Pergunto: alguém sabe de alguma classe que implemente TODOS esses comportamentos descritos acima? Ou eu terei que fazer algumas coisas na mão?
Sabe como é, né? É sempre bom NÃO reinventar a roda.
Valeu! _________________Atenciosamente,
Victor de Alencar Jesus.
Eu desconheço uma classe pronta na API, mas com um pouco de código você consegue implementar isso. Eu fiz algo muito parecido com o que você precisa, a diferença foi que não aceita chave duplicada, pois ele usava internamente um LinkedHashMap. _________________Marcelo Varella
O nome dela é TreeMap, ela tem um método chamado submap, que diz o seguinte:
subMap(K fromKey, boolean fromInclusive, K toKey, boolean toInclusive)
Returns a view of the portion of this map whose keys range from fromKey to toKey.
Agora só tenho que ver se ela aceita valores repetidos. Ela segue uma ordenação natural, mas se eu sobreescrever o método Comparator(), posso fazer ela seguir a ordenação que eu quero, creio eu, já que ele é usado no algortimo de ordenação.
Vou fazer os testes e posto aqui os resultados.
Valeu! _________________Atenciosamente,
Victor de Alencar Jesus.
Returns:
previous value associated with specified key, or null if there was no mapping for key. A null return can also indicate that the map previously associated null with the specified key.
Você pode criar uma lista ordenada de uma classe que tenha chave e valor (igual ao Entry do Map).
Porque os mapas não aceitam chaves duplicadas, então você teria que usar uma lista ordenada com um objeto de chave-valor _________________Marcelo Varella
a pergunta que eu fico me fazendo:
pq eu teria um Map que aceitasse chaves duplicadas???
qual o comportamento que vc espera que aconteca??
quando fizer map.get("chaveDuplicada") o que vc espera que aconteça?
retorne um array referentes a essa chave???
ate inde eu sei nenhuma implementação das coleções implementa isso, e realmente eu não vejo necessidade de ter isso??? se eu posso ter varios valore iguais p/ uma chave, pq nap ter um array com esses valores e coloca-lo com uma chave unica???
isso deve ser exercicio de faculdade, certo?
o que vc pode fazer é procurar a implementação que mais se aproxima do que vc precisa e estender essa classe p/ sobrescrever os metodos que vc precisa mudar o comportamento.
a pergunta que eu fico me fazendo:
pq eu teria um Map que aceitasse chaves duplicadas???
Eu posso ter chaves iguais, com valores diferentes, não posso? Eu posso querer, por exemplo saber quais são os pontos que estão na coordenada X, de um determinado plano cartesiano e, se eu for classificar essa lista pelas minhas coordenas X, logo, tenho que admitir a possibilidade de repetição nas chaves.
qual o comportamento que vc espera que aconteca??
quando fizer map.get("chaveDuplicada") o que vc espera que aconteça?
retorne um array referentes a essa chave???
Sim. Se eu fizer: map.get(10), eu quero que todos os objetos que esitverem na coordenada X=10 sejam retornados.
ate inde eu sei nenhuma implementação das coleções implementa isso, e realmente eu não vejo necessidade de ter isso???
Pois é... parece esquisito, mas tem lógico. Juro por Deus! rsrsrs!
se eu posso ter varios valore iguais p/ uma chave, pq nap ter um array com esses valores e coloca-lo com uma chave unica???
Eu até cheguei a fazer como vc falou. Eu usei o seguinte:
HashMap> LocalizacaoUnidades
E aí, quando eu queria acessar alguém eu fazia
LocalizacaoUnidades.get(indice).get(indice2).metodo_da_unidade, sendo que quando eu fiz com uma massa de dados muito grande, se mostrou lento. Além disso, eu preciso trabalhar com faixas, tipo: "quero saber que está de X1,Y1 até X2,Y2". Acho que se eu tiver que buscar em linhas e colunas ao invés de somente linhas, ficaria muito mais lento.
Pode ser até que eu esteja trocando seis por meia-dúzia, mas quero tentar. De repente, ganho alguma velocidade.
Valeu! _________________Atenciosamente,
Victor de Alencar Jesus.
http://code.google.com/p/google-collections/ _________________In fact, people who study design methods without also practicing design are almost always frustrated designers who have no sap in them, who have lost, or never had, the urge to shape things. Such a person will never be able to say anything sensible about "how" to shape things either. (Christopher Alexander)
Isso tá parecendo uma matriz, as chaves seriam as linhas e os valores, as colunas. Acho que por aí dá pra fazer o que você precisa, mas no seu caso, com as "linhas" e "colunas" variáveis. _________________Marcelo Varella
Eu tentei fazer dessa forma, como eu falei aí em cima, mas achei lento. Vou tentar de outra forma, mas, tô vendo que vai dar na mesma.
Uma vez eu li que, quando começa a ficar muito complicado, é pq está errado. Vou dar uma analisada na minha lógica, pq acho que tô dando mole em alguma coisa.
Ronaldtm,
Valeu pelos links. Foi para os meus favoritos. Vou dar uma boa lida lá.
Valeu pessoal! _________________Atenciosamente,
Victor de Alencar Jesus.
_vajPosts:42
Pessoal,
Tô precisando do seguinte: um "ArrayList" que tenha o seguinte comportamento:
=> Ele tem que funcionar como um HashTable, ou seja, ele tem que implementar chave e valor.
=> Ele tem que permitir que eu coloque valores repetidos nas chaves.
=> Ele tem que ordenar essa lista pelas chaves automaticamente.
=> Ele tem que permitir que eu busque os dados nessa lista por intervalo. Por exemplo: lista.obterdados(10,45). No caso, esse método me retornaria uma lista com todos os elementos, cujo o valor d chave esteja entre 10 e 45.
Para alguns comportamentos desses, eu até achei classes que me ajudariam na API (HashSet, por exemplo), mas não tem tudo que eu quero.
Procurei na API da JAVA, mas confesso que não tive muita paciência para procurar.
Pergunto: alguém sabe de alguma classe que implemente TODOS esses comportamentos descritos acima? Ou eu terei que fazer algumas coisas na mão?
Sabe como é, né? É sempre bom NÃO reinventar a roda.
Valeu!
_________________Atenciosamente,
Victor de Alencar Jesus.
AtaxexePosts:401
Eu desconheço uma classe pronta na API, mas com um pouco de código você consegue implementar isso. Eu fiz algo muito parecido com o que você precisa, a diferença foi que não aceita chave duplicada, pois ele usava internamente um LinkedHashMap.
_________________Marcelo Varella
_vajPosts:42
Marcelo, achei a danada!
O nome dela é TreeMap, ela tem um método chamado submap, que diz o seguinte:
subMap(K fromKey, boolean fromInclusive, K toKey, boolean toInclusive)
Returns a view of the portion of this map whose keys range from fromKey to toKey.
Agora só tenho que ver se ela aceita valores repetidos. Ela segue uma ordenação natural, mas se eu sobreescrever o método Comparator(), posso fazer ela seguir a ordenação que eu quero, creio eu, já que ele é usado no algortimo de ordenação.
Vou fazer os testes e posto aqui os resultados.
Valeu!
_________________Atenciosamente,
Victor de Alencar Jesus.
AtaxexePosts:401
Mas ela não aceita chaves repetidas.
http://java.sun.com/j2se/1.4.2/docs/api/java/util/TreeMap.html#put(java.lang.Object,%20java.lang.Object)[/url]