如何根据索引获取LinkedHashMap中的前两个值?
LinkedHashMap获取前两个元素的实现方法
首先先修正你原代码里的几个问题:
- 类型不匹配:你声明的
Map<String, String>是字符串键,但put时用了整数类型的键(1、2、3),会直接编译报错,得统一键的类型(比如都用Integer或String); entry.getValue()没有参数,不能传入i,这是语法错误;- 嵌套循环完全多余,会造成重复遍历,降低效率。
下面是几种可行的实现方式:
方式一:遍历entrySet计数截取
// 统一键类型为Integer,也可以改成String类型(put时用"1"、"2") Map<Integer, String> map = new LinkedHashMap<>(); map.put(1, "value 1"); map.put(2, "value 2"); map.put(3, "value 3"); int count = 0; for (Map.Entry<Integer, String> entry : map.entrySet()) { if (count < 2) { System.out.println(entry.getValue()); count++; } else { break; // 拿到前两个元素就停止遍历,提升效率 } }
方式二:Java 8+ Stream流简化实现
如果只需要获取值,直接对values集合做流处理:
Map<Integer, String> map = new LinkedHashMap<>(); map.put(1, "value 1"); map.put(2, "value 2"); map.put(3, "value 3"); map.values().stream() .limit(2) .forEach(System.out::println);
如果需要同时获取键和值,处理entrySet的流即可:
Map<Integer, String> map = new LinkedHashMap<>(); map.put(1, "value 1"); map.put(2, "value 2"); map.put(3, "value 3"); map.entrySet().stream() .limit(2) .forEach(entry -> System.out.println("键:" + entry.getKey() + ",值:" + entry.getValue()));
注意
LinkedHashMap默认是插入顺序有序的,所以遍历的时候能保证先拿到最早put的元素,这是能准确获取前两个元素的前提。
内容的提问来源于stack exchange,提问作者stack offer
相关产品推荐
相关产品推荐

