1.7 实现Map并保持插入顺序的Java类?| Java Debug 笔记

312 阅读2分钟

本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看 活动链接

Debug 笔记 <实现Map并保持插入顺序的Java类?>

提问

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

我正在寻找具有键-值关联的Java类,但不使用哈希。这是我目前正在做的事情:

  1. 将值添加到中Hashtable
  2. 获取的迭代器Hashtable.entrySet()
  3. 遍历所有值和:
  • Map.Entry为迭代器获取一个。
  • Module根据该值创建类型的对象(自定义类)。
  • 将类添加到JPanel
  1. 显示面板。 这样做的问题是我无法控制获取值的顺序,因此无法按给定顺序显示值(没有对顺序进行硬编码)。 我会为此使用ArrayListor Vector,但是稍后在代码中,我需要获取Module给定Key的对象,而对于ArrayListor而言,这是无法做到的Vector。 有谁知道一个免费的/开源的Java类可以做到这一点,还是一种从添加值中获取值的方式Hashtable

回答一:

我建议一个LinkedHashMap或一个TreeMapALinkedHashMap保持键的插入顺序,而aTreeMap则通过aComparatorComparable元素的自然顺序进行排序。 由于不必对元素进行排序,LinkedHashMap因此在大多数情况下应该更快。TreeMapO(log n)表现为containsKeygetput,和remove。 如果您的API仅期望可预测的排序顺序,而不是特定的排序顺序,请考虑使用这两个类实现的接口,NavigableMapSortedMap。这样一来,您就不会将特定的实现泄漏到您的API中,之后便可以随意切换到这些特定的类或完全不同的实现。

回答二:

当您遍历MapkeySet()entrySet()values()时,

LinkedHashMap将按插入地图的顺序返回元素。

Map<String, String> map = new LinkedHashMap<String, String>();

map.put("id", "1");
map.put("name", "rohan");
map.put("age", "26");

for (Map.Entry<String, String> entry : map.entrySet()) {
    System.out.println(entry.getKey() + " = " + entry.getValue());
}

这将按照将元素放入地图的顺序进行打印:

id = 1
name = rohan 
age = 26 

文章翻译自Stack Overflow :stackoverflow.com/questions/6…