Sha*_*ane 438 java dictionary key-value
我正在寻找一个具有键值关联的java类,但不使用哈希.这是我目前正在做的事情:
Hashtable
.Hashtable.entrySet()
.Map.Entry
迭代器.Module
根据值创建类型(自定义类)的对象.这个问题是我无法控制返回值的顺序,所以我不能以给定的顺序显示值(不对代码进行硬编码).
我会使用一个ArrayList
或Vector
为此,但稍后在代码中我需要抓取Module
给定Key 的对象,我无法使用ArrayList
或Vector
.
有没有人知道一个可以执行此操作的免费/开源Java类,或者Hashtable
根据添加时间来获取值的方法?
谢谢!
Mic*_*ers 693
我建议一个LinkedHashMap
或一个TreeMap
.A LinkedHashMap
按照插入顺序保持键,而a TreeMap
通过元素Comparator
的自然Comparable
顺序保持排序.
由于它不必保持元素排序,LinkedHashMap
因此对于大多数情况应该更快; TreeMap
有O(log n)
表现为containsKey
,get
,put
,和remove
,根据的Javadoc,而LinkedHashMap
是O(1)
对每个.
如果您的API仅期望可预测的排序顺序,而不是特定的排序顺序,请考虑使用这两个类实现的接口,NavigableMap
或SortedMap
.这将允许您不要将特定实现泄漏到API中,然后切换到这些特定类中的任何一个,或者随后切换到完全不同的实现.
Pra*_*hor 19
当您遍历地图的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());
}
Run Code Online (Sandbox Code Playgroud)
这将按照放入地图的顺序打印元素:
id = 1
name = rohan
age = 26
Run Code Online (Sandbox Code Playgroud)
jvd*_*ste 16
如果一个不可变的地图符合您的需求,那么谷歌有一个名为guava的库(另见番石榴问题)
Guava为ImmutableMap提供了可靠的用户指定迭代顺序.这个ImmutableMap对containsKey,get有O(1)性能.显然不支持put和remove.
ImmutableMap对象是使用()和copyOf()的优雅静态方便方法或Builder对象构造的.
小智 8
您可以使用LinkedHashMap在 Map 中主要插入顺序
Java LinkedHashMap 类的要点是:
它只包含独特的元素。
LinkedHashMap 包含基于键的值。
它可能有一个空键和多个空值。
它与HashMap相同,只是维护插入顺序
public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V>
Run Code Online (Sandbox Code Playgroud)
但是,如果您希望使用用户定义的对象或任何原始数据类型键对映射中的值进行排序,那么您应该使用TreeMap有关更多信息,请参阅此链接
归档时间: |
|
查看次数: |
242425 次 |
最近记录: |