我可以单独访问HashMap的第一个和第二个元素吗? 我的意思是,如果我有一个HashMap
Map<Integer, Integer> testMap = new HashMap<Integer, Integer>();
int f = testMap.first();
我知道没有这样的功能,但我怎样才能访问该元素?
答案 0 :(得分:2)
HashMap
无法保持秩序。
此课程不保证地图的顺序;在 特别是,它不保证订单将保持不变 随着时间的推移。
您可以使用维护广告订单的LinkedHashMap
或TreeMap
。
这个实现与HashMap的不同之处在于它维护了一个 贯穿其所有条目的双向链表。这有联系 list定义迭代排序,通常是顺序 哪些键被插入到地图中(插入顺序)。注意 如果将键重新插入地图,则不会影响插入顺序。 (如果调用m.put(k,v),则将密钥k重新插入到映射m中 m.containsKey(k)将在紧接之前返回true 调用。)
地图根据其键的自然顺序排序,或者根据地图创建时提供的Comparator
排序,具体取决于使用的构造函数。
答案 1 :(得分:0)
地图不是有序的,因此没有“第一个条目”这样的东西,这也是为什么在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()
并不意味着您正在迭代整个地图。
答案 2 :(得分:0)
没有。你不能将HapMap / HashTable存储在Entry(http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Map.Entry.html)的Entry中,它将键和值保存在一起。
你总是可以获得entrySet()的Iterator并访问这些条目。或者尝试获取仅返回密钥集的keySet()。
希望这会有所帮助。
答案 3 :(得分:0)
您可以使用包含LinkedHashMap
和firstKey
等方法的lastKey
。但是对于第二个键,您必须迭代并按顺序获取元素在地图中输入的键< / p>
答案 4 :(得分: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
不记得添加了哪些订单元素,因此“第一个元素”不一定意味着“首先添加”。
答案 5 :(得分: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());
}