我可以分别访问 HashMap 的第一个和第二个元素吗?我的意思是如果我有一个 HashMap
Map<Integer, Integer> testMap = new HashMap<Integer, Integer>();
int f = testMap.first();
我知道没有这样的功能,但我怎样才能访问那个元素呢?
HashMap
不维持秩序。
此类不保证地图的顺序;特别是,它不保证订单会随着时间的推移保持不变。
您可以使用LinkedHashMap
which 维护插入顺序或TreeMap
.
此实现与 HashMap 的不同之处在于它维护一个双向链表,该列表贯穿其所有条目。这个链表定义了迭代顺序,通常是键插入映射的顺序(插入顺序)。请注意,如果将键重新插入到地图中,则插入顺序不会受到影响。(如果在调用 m.containsKey(k) 将在调用之前立即返回 true 时调用 m.put(k, v),则将键 k 重新插入到映射 m 中。)
地图根据其键的自然顺序或Comparator
在地图创建时提供的排序,具体取决于使用的构造函数。
Iterator it = testMap.entrySet().iterator();
while (it.hasNext()) {
Map.Entry pairs = (Map.Entry) it.next();
System.out.println("Key"+pairse.getKey());
System.out.println("Value"+pairs.getValue());
}
Map 没有排序,因此没有“第一个条目”之类的东西,这也是 Map(或 HashMap)上没有 get-by-index 方法的原因。
你可以这样做:
Map<Integer, Integer> map = ...; // wherever you get this from
// Get the first entry that the iterator returns
Map.Entry<Integer, Integer> entry = map.entrySet().iterator().next();
(Note: Checking for an empty map omitted).
您的代码不会获取地图中的所有条目,它会立即返回(并跳出循环)并找到第一个条目。
注意:调用iterator()
并不意味着您正在遍历整个地图。
不。你不能像 HapMap/HashTable 一样将数据存储在 Entry for ( http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Map.Entry.html ) 中,它包含键和值一起。
您始终可以获取 entrySet() 的迭代器并访问条目。或尝试获取仅返回一组键的 keySet()。
希望这可以帮助。
您可以使用LinkedHashMap
which 具有和 之类的方法firstKey
。lastKey
但是对于第二个键,您必须进行迭代,并且按照在地图中输入键的顺序获取元素
HashMap <Integer, Integer> testMap = new HashMap <Integer, Integer> ();
testMap.put (1, 2);
testMap.put (2, 3);
Iterator <Integer> i = testMap.values ().iterator ();
System.out.println ("First element: " + i.next ());
System.out.println ("Second element: " + i.next ());
请注意,因为HashMap
不记得添加了哪些顺序元素,“第一个元素”不一定意味着“第一个添加”。