本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看 活动链接
Debug 笔记 <实现Map并保持插入顺序的Java类?>
提问
实现Map并保持插入顺序的Java类?
我正在寻找具有键-值关联的Java类,但不使用哈希。这是我目前正在做的事情:
- 将值添加到中
Hashtable。 - 获取的迭代器
Hashtable.entrySet()。 - 遍历所有值和:
Map.Entry为迭代器获取一个。Module根据该值创建类型的对象(自定义类)。- 将类添加到
JPanel。
- 显示面板。
这样做的问题是我无法控制获取值的顺序,因此无法按给定顺序显示值(没有对顺序进行硬编码)。
我会为此使用
ArrayListor Vector,但是稍后在代码中,我需要获取Module给定Key的对象,而对于ArrayListor而言,这是无法做到的Vector。 有谁知道一个免费的/开源的Java类可以做到这一点,还是一种从添加值中获取值的方式Hashtable?
回答一:
我建议一个LinkedHashMap或一个TreeMap。ALinkedHashMap保持键的插入顺序,而aTreeMap则通过aComparator或Comparable元素的自然顺序进行排序。
由于不必对元素进行排序,LinkedHashMap因此在大多数情况下应该更快。TreeMap有O(log n)表现为containsKey,get,put,和remove。
如果您的API仅期望可预测的排序顺序,而不是特定的排序顺序,请考虑使用这两个类实现的接口,NavigableMap或SortedMap。这样一来,您就不会将特定的实现泄漏到您的API中,之后便可以随意切换到这些特定的类或完全不同的实现。
回答二:
当您遍历Map的keySet(),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…