[Prévia] [Próxima] [Prévia por assunto] [Próxima por assunto]
[Índice cronológico] [Índice de assunto]

Re: LinkedHashMap



Só completando,


O LinkedHashMap internamente possui um HashTable e uma LinkedList. Ele
armazena os elementos (como um HashTable) mas mantém a ordem em que os
elementos foram inseridos ou acessados (o usuário define qual o
critério).

Após toda inserção, o LinkedHashMap executa o método
removeEldestEntry(Map.Entry eldest) que devolve 'true' se o elemento
'eldest' deve ser removido ou 'false' caso contrário.

Isso faz com que a classe seja perfeita para criar um cache do tipo LRU
(Least Recently Used). Para criar um cache que contenha no máximo MAX
elementos, basta definir que a ordem mantida será a ordem
de acesso e implementar o removeEldestEntry:


protected boolean removeEldestEntry(Map.Entry eldest) {
	return this.size() > MAX;
}


Esta classe foi muito útil neste EP. :-)


Mais informações podem ser obtidas em:

http://developer.java.sun.com/developer/JDCTechTips/2002/tt0709.html#tip1
e
http://java.sun.com/j2se/1.4.1/docs/api/java/util/LinkedHashMap.html


Abraço,

	Daniel

Daniel André Vaquero escreveu:
> Olá!
> 
> Conforme conversamos hoje no início da aula, estou escrevendo para falar
> sobre a classe do Java que minha equipe usou para fazer o cache de
> serventes no EP, usando ServantLocator.
> Usamos a classe LinkedHashMap do Java 1.4, que facilitou muito a
> implementação (foi só redefinir o método removeEldestEntry para definir
> quando um servente seria eliminado do cache). Dessa forma, não tivemos que
> nos preocupar com estruturas de dados para implementar o cache do "Evictor
> Pattern".
> 
> Abraços,
> 
> -- 
>  Daniel <daniel@linux.ime.usp.br>

-- 
Daniel de Angelis Cordeiro   <danielc@linux.ime.usp.br>

-- 
To me vi is Zen.  To use vi is to practice zen. Every command is
a koan. Profound to the user, unintelligible to the uninitiated.
You discover truth everytime you use it.
                                      -- reddy@lion.austin.ibm.com