0

我可以分别访问 HashMap 的第一个和第二个元素吗?我的意思是如果我有一个 HashMap

Map<Integer, Integer> testMap = new HashMap<Integer, Integer>();
int f = testMap.first();

我知道没有这样的功能,但我怎样才能访问那个元素呢?

4

6 回答 6

2

HashMap不维持秩序。

此类不保证地图的顺序;特别是,它不保证订单会随着时间的推移保持不变。

参考

您可以使用LinkedHashMapwhich 维护插入顺序或TreeMap.

LinkedHashMap

此实现与 HashMap 的不同之处在于它维护一个双向链表,该列表贯穿其所有条目。这个链表定义了迭代顺序,通常是键插入映射的顺序(插入顺序)。请注意,如果将键重新插入到地图中,则插入顺序不会受到影响。(如果在调用 m.containsKey(k) 将在调用之前立即返回 true 时调用 m.put(k, v),则将键 k 重新插入到映射 m 中。)

树状图

地图根据其键的自然顺序或Comparator在地图创建时提供的排序,具体取决于使用的构造函数。

于 2013-03-02T07:10:51.030 回答
0
 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());
}
于 2013-03-02T07:39:32.530 回答
0

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()并不意味着您正在遍历整个地图。

于 2013-03-02T07:12:30.163 回答
0

不。你不能像 HapMap/HashTable 一样将数据存储在 Entry for ( http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Map.Entry.html ) 中,它包含键和值一起。

您始终可以获取 entrySet() 的迭代器并访问条目。或尝试获取仅返回一组键的 keySet()。

希望这可以帮助。

于 2013-03-02T07:13:48.530 回答
0

您可以使用LinkedHashMapwhich 具有和 之类的方法firstKeylastKey但是对于第二个键,您必须进行迭代,并且按照在地图中输入键的顺序获取元素

于 2013-03-02T07:14:13.287 回答
0
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不记得添加了哪些顺序元素,“第一个元素”不一定意味着“第一个添加”。

于 2013-03-02T07:14:15.517 回答