哪个Map最适合用来实现LRU Cache?
前段时间面试碰到的一道题,最近进了这家公司了,再拿出来看看。求大神继续解脱。30. 下面哪个Map最适合用来实现LRU Cache?
A. Hashtable
B. TreeMap
C. HashMap
D. IdentityHashMap
E. WeakHashMap
网上给的答案是A。为什么?
大家一般如何实现这个 最近最少使用 cache? --------------------编程问答-------------------- 就那几个可选的来说 只能是A了 因为是线程安全的
不过 个人认为应该用 Map map = Collections.synchronizedMap(new LinkedHashMap()); --------------------编程问答-------------------- LRU缓存介绍与实现,平时很少用到 --------------------编程问答-------------------- 连表HashMap最合适, 可以修正排序位置. --------------------编程问答-------------------- LinkedHashMap么? --------------------编程问答-------------------- 是的,我觉得LinkedHashMap很合适, 这个本来在jdk 说明中就有说可以用做 lru的原始说明的.
你可以查api --------------------编程问答-------------------- 你这个 重点是 cache 既然是cache 就一定要注意“容器”的线程安全方面的东西
lru是你cache的实现算法,
算法实现上 要先保证数据的正确性,,再考虑性能
所以,,,就像我在2#回复的一样了 --------------------编程问答-------------------- 因为hashmap的实现原理是 表(数组)+链表的形式来实现的,当查找一个key时,先计算hashcode,得到对应该的entry<K,V>,entry是链表结构,调用其next方法逐个entry来跟k比较,最终取得value。
如果再次查找同一个key,就只计算hashcode即可取得value,因为在上次取的时候已经把entry
的链表指针指向了这个value --------------------编程问答-------------------- LinkedHashMap 双向链表 --------------------编程问答-------------------- 能不能详细阐述下原因?这样的回答make no sense哦。
补充:Java , Java SE