Pegar o primeiro valor disponível em um HashMap

Olá a todos…
estou com um pequeno problema de lógica relacionada a hashMaps que não consigo resolver, então se alguem tiver qualquer dica que possa me ajudar, agradeeria muito.

Tenho dois HashMaps: Usados e Livres
O HashMap “livres” começa com 4 elementos e toda vez que um é usado, ele é removido do “livres” e colocado no “usados” . Quando ele termina de ser usado, acontece o contrário, ou seja, ele é removido do “usados” e volta a ser colocado no livres.

o que eu quero esta relacionado com pegar qualquer elemento que esteja no hashMap “livres”. Entendam que o problema não é pegar um específico mas sim qualquer um.
Consigo verificar se o hasMap “livres” está vazio ou não, mas quando não está gostaria de poder pegar qualquer um deles e é essa parte que eu não consigo fazer.

Se alguem tiver alguma dica, agradeceria muito

Fala BrenoBex.
Neste cenário que você descreveu, não aplicaria utilizar o MAP.
Analise uma outra Collections que se aplica para sua necessidade.
Abçs.

[quote=BrenoBex]Olá a todos…
estou com um pequeno problema de lógica relacionada a hashMaps que não consigo resolver, então se alguem tiver qualquer dica que possa me ajudar, agradeeria muito.

Tenho dois HashMaps: Usados e Livres
O HashMap “livres” começa com 4 elementos e toda vez que um é usado, ele é removido do “livres” e colocado no “usados” . Quando ele termina de ser usado, acontece o contrário, ou seja, ele é removido do “usados” e volta a ser colocado no livres.

o que eu quero esta relacionado com pegar qualquer elemento que esteja no hashMap “livres”. Entendam que o problema não é pegar um específico mas sim qualquer um.
Consigo verificar se o hasMap “livres” está vazio ou não, mas quando não está gostaria de poder pegar qualquer um deles e é essa parte que eu não consigo fazer.

Se alguem tiver alguma dica, agradeceria muito[/quote]

Não compreendi bem sua necessidade. É possível postar seu código com todos os objetos envolvidos para análise?
Abraços.

Map<String, String> livres = new HashMap<String, String>();
livres.put ("primeiro", "first");
livres.put ("segundo", "second");
if (livres.size() > 0) {
    Map.Entry<String, String> someEntry = livres.entrySet().iterator().next();
    // note que como é um hash map, a "primeira" entrada é uma entrada qualquer. Pode ser, por exemplo,
    // que você recupere a entrada "segundo", "second". 
    String key = someEntry.getKey(); // pode ser "segundo", sei lá - não rodei o programa para saber o resultado
    String value = someEntry.getValue(); // se a chave for "segundo", o valor será "second". 
}

[quote=entanglement] Map<String, String> livres = new HashMap<String, String>(); livres.put ("primeiro", "first"); livres.put ("segundo", "second"); if (livres.size() > 0) { Map.Entry<String, String> someEntry = livres.entrySet().iterator().next(); // note que como é um hash map, a "primeira" entrada é uma entrada qualquer. Pode ser, por exemplo, // que você recupere a entrada "segundo", "second". String key = someEntry.getKey(); // pode ser "segundo", sei lá - não rodei o programa para saber o resultado String value = someEntry.getValue(); // se a chave for "segundo", o valor será "second". } [/quote]

Não entendi bem, você quer ter certeza que “someEntry.getKey()” retornaria “primeiro”? Se for isso use LinkedHashMap, ele mantém a ordem de inserção.

Como um hashmap é uma estrutura não-ordenada, pegar a primeira entrada retornada por .iterator().next() vai retornar “qualquer um”, que é o que ele quer.
É por isso que eu mencionei que não sei se o resultado vai ser a entrada (“primeiro”, “first”) ou a entrada (“segundo”, “second”).

Se precisar por ordem de inserção, pode usar um LinkedHashMap.
Se precisar por “elemento que foi acessado há mais tempo, ou seja, mais velho” (usualmente para estratégias de cache LRU = Least Recently Used), use um LinkedHashMap; no construtor de LinkedHashMap você tem de passar um booleano accessOrder = true nesse caso.