在Java中,LinkedHashSet是使用支持HashSet创建的,使用以下LinkedHashMap构造函数创建LinkedHashMap
map = new LinkedHashMap<>(initialCapacity, loadFactor);
现在在LinkedHashMap中,上面的构造函数依次调用
public LinkedHashMap(int initialCapacity, float loadFactor) {
super(initialCapacity, loadFactor);
accessOrder = false;
}
那么有没有办法将accessOrder
设置为true
的LinkedHashSet?
这可以帮助使用LinkedHashSet创建LRU缓存实现。
答案 0 :(得分:3)
LinkedHashSet
不支持访问顺序,因为您没有访问LinkedHashSet
的元素。
您可以向LinkedHashSet
添加元素,然后按插入顺序迭代它们。
当您检查元素是否是LinkedHashSet
的成员时,您无法访问它。您通过boolean contains(Object o)
检查会员资格,并为支持地图调用map.containsKey(o)
。但是,containsKey()
不会影响Map
的访问顺序。
另一方面,get(Object key)
的{{1}}方法会影响访问顺序,但LinkedHashMap
永远不会使用它。
答案 1 :(得分:1)
从源代码中可以看出,LinkedHashSet由LinkedHashMap支持,accessOrder设置为false。
此外,LinkedHashSet没有公共构造函数可以将访问顺序从插入顺序更改为访问顺序。
你可以尝试这个(只是一个例子):
LinkedHashSet<E> set = (LinkedHashSet<E>) Collections.newSetFromMap(new LinkedHashMap<>(16, 0.75f, true));