所以我知道如何从一开始就遍历整个linkedhashmap,但是如果我只想链接到其中的某个部分呢?即:我想从头开始,只返回4个元素。我如何做到这一点,这是可能的吗?
发布于 2013-11-19 18:12:02
您正在搜索的是一个允许您在列表中向后迭代的ListIterator。不幸的是,LinkedHashMap没有持有对前一个元素的引用,因此没有提供这个迭代器。
所以,你最终得到了两个解决方案。首先,您实现了查找最后X个元素的方法:您持有一个大小为X的数组(一个循环缓冲区),并将您看到的最后X个元素保存在那里。如果您频繁调用此方法,并且X的大小远远小于地图的大小,则此解决方案的效率会非常低。
第二种解决方案是保留HashMap而不是LinkedHashMap,并保留额外的List以保持插入顺序。例如提供ListIterator并因此提供反向迭代的ArrayList或LinkedList。
发布于 2013-11-19 18:08:46
您必须扩展标准实现并覆盖将适当迭代器返回给您自己的方法。
Iterator<K> newKeyIterator() { return new KeyIterator(); }
Iterator<V> newValueIterator() { return new ValueIterator(); }
Iterator<Map.Entry<K,V>> newEntryIterator() { return new EntryIterator(); }LinkedHashMap.Entry是一个双向链表,所以你也可以向前和向后移动。LinkedHashMap.LinkedHashIterator是LinkedHashMap的基本迭代器。在此基础上做出你需要的东西。
发布于 2013-11-19 18:17:48
您可以通过执行以下操作来使用ListIterator。
List list = new ArrayList<>(map.keySet());
ListIterator li = list.listIterator(list.size());
while (li.hasPrevious()) {
System.out.println(map.get(li.previous()));
}由于LinkedHashMap负责维护顺序,因此您可以简单地从将按顺序排列的键创建一个列表。从最后一个索引中获取一个ListIterator,这样您就可以向后遍历一个计数器(我还没有给出它)来迭代直到no。所需元素的数量。
https://stackoverflow.com/questions/20068430
复制相似问题