实现Map并保持插入顺序的Java类?

我正在寻找一个具有键值关联的java类,但不使用散列。 这是我目前正在做的事情:

  • 将值添加到Hashtable
  • 获取Hashtable.entrySet()的迭代器。
  • 遍历所有值和:
  • 获取迭代器的Map.Entry
  • 根据值创建一个Module (一个自定义类)类型的对象。
  • 将该类添加到JPanel。
  • 显示面板。
  • 问题在于我无法控制返回值的顺序,因此无法按给定顺序显示值(不对订单进行硬编码)。

    我会为此使用ArrayListVector ,但后来在代码中,我需要为给定的Key获取Module对象,而我无法使用ArrayListVector

    有谁知道一个免费/开源的Java类可以做到这一点,或者是一种基于何时添加值从Hashtable获取值的方法?

    谢谢!


    我建议一个LinkedHashMap或一个TreeMap 。 一个LinkedHashMap按照它们被插入的顺序保存这些键,而一个TreeMap通过一个Comparator或者元素的自然Comparable排序保持排序。

    由于不需要保持元素的排序,所以在大多数情况下, LinkedHashMap应该更快; 根据Javadocs, TreeMapcontainsKeygetputremove具有O(log n)性能,而LinkedHashMap对每个都是O(1)

    如果您的API仅仅需要可预测的排序顺序,而不是特定的排序顺序,请考虑使用这两个类实现的接口, NavigableMapSortedMap 。 这将允许您不要将特定的实现泄露到您的API中,然后切换到这些特定的类中,或者随意切换到完全不同的实现。


    如果一张不可变的地图符合你的需求,那么谷歌有一个名为番石榴的图书馆(另请参阅番石榴问题)

    Guava提供了一个具有可靠的用户指定迭代顺序的ImmutableMap。 这个ImmutableMap对于containsKey,get具有O(1)性能。 显然放和删除不支持。

    ImmutableMap对象通过使用()和copyOf()或Builder对象的优雅静态便利方法来构造。


    你可以维护一个Map (用于快速查找)和List (用于顺序),但是LinkedHashMap可能是最简单的。 你也可以尝试一个SortedMap例如TreeMap ,它有你指定的任何顺序。

    链接地址: http://www.djcxy.com/p/4093.html

    上一篇: Java Class that implements Map and keeps insertion order?

    下一篇: How can I initialise a static Map?