我知道HashMap没有排序,但是有任何东西我可以创建迭代器,它按键的排序顺序返回值。我可以使用排序版本的集合,但我正在寻找一种方法来使用基于哈希的地图。对HashMap进行排序迭代Java
回答
您可以使用TreeMap,因为它是一个有排序的地图。
任何这样的迭代器都必须在内部对HashMap
的所有键进行排序,以便能够按排序顺序对它们进行迭代。使用已经排序的Map
实施会更有效率。
与Java 8,这是非常简单的:
import static java.util.Map.Entry.comparingByKey;
public <K extends Comparable<? super K>, V> Iterator<V> orderedIterator(final Map<K, V> map) {
return map.entrySet().stream()
.sorted(comparingByKey())
.map(Map.Entry::getValue)
.iterator();
}
注意,这是缓慢,作为Stream
需要每次进行排序 - 使迭代变得O(n lg n)
而非O(n)
。如果你需要做很多事情,你最好使用TreeMap
--插入为O(lg n)
(而不是O(1)
),但迭代仍然是O(n)
。
我不确定这是完全可能的,至少从地图的角度来看,虽然我们可以创建一个特殊的哈希映射从排序顺序返回键。
该地图可以延伸HashMap
并且有一个变量,它包含排序顺序,然后有一个方法以排序顺序返回键和值。
您可以使用一个静态实用程序方法,它按排序顺序执行HashMap
并返回一个Map.Entry
的数组。
虽然上面的工作可能会起作用,但TreeMap
可能是最好的选择。它是为这项任务设计的,由Josh Blotch编写,所以它的功能必然很快。重新磨轮通常需要更长的时间,并且不能很好地工作。
注意:这取决于用例。如果您只需要使用一次排序值,那么实用方法或自定义HashMap
实施将是最好的。如果您打算经常使用Map
,那么请使用TreeMap
。
取决于。如果你只需要做一次;那么对'entrySet'进行排序的代价将小于维护'TreeMap'的成本。 'TreeMap'与'HashMap'相比非常慢 - 它也需要更多的空间。你的最后一段真的取决于用例 - 它需要基准来确定哪种方法更好。 –
@Boris the Spider我假设操作系统想要使用经过排序的'HashMap'实现,或者使用简单的实用程序方法。尽管我会更新答案以反映这一点。 –
- 1. 在Java(或Scala)中对HashMap的HashMap进行迭代
- 2. 根据Value对Key进行排序HashMap?
- 3. 如何在Java中对HashMap进行排序?
- 4. 迭代Java合并排序
- 5. 如何通过Python中的已排序迭代进行迭代
- 6. Java - 用HashMap替代ArrayList的迭代
- 7. 对其属性的HashMap对象进行排序而不是值
- 8. 当值为对象时,按属性对hashMap进行排序
- 9. 在Java中对ArrayList进行排序
- 10. Java-8对集合进行排序
- 11. Java PriorityList,如何对它进行排序?
- 12. Java - 对2D数组进行排序
- 13. 使用Java对数组进行排序
- 14. 用Java对XML进行排序
- 15. 如何使用整数键对数组的HashMap进行排序Java
- 16. 的Java:迭代的HashMap - 算法所需
- 17. Java中的HashMap上的迭代器
- 18. 通过HashMap迭代[Springboot,MVC,Java,Thymeleaf]
- 19. 的Java迭代HashMap的2级
- 20. Java:通过HashMap迭代,效率更高?
- 21. HashMap迭代器ConcurrentModificationException
- 22. 如何对HashMap中的值(ArrayList <String>)进行排序
- 23. 通过int值对HashMap <String,Object>的ArrayList进行排序
- 24. HashMap的新功能:我如何对它进行排序?
- 25. 如何在Android中对HashMap(ArrayList内)进行排序?
- 26. 如何使用ArrayAdapter对Android中添加的HashMap进行排序
- 27. 如何根据值对hashmap进行排序?
- 28. 在Java 8中迭代HashMap时稳定的元素排序问题
- 29. Java Bubble排序迭代只有两次
- 30. 使用Select-String对已排序哈希表进行迭代包括空行?
是的我可以,我正在寻找一种方法来使用HashMap来做同样的事情 – Avinash