在 Java 中获取 Map 的前 5 个元素

Get the first 5 elements of a Map in Java

我正在为大学做一个 Java 项目。我需要在 String 列表中添加 Map 的前 5 个值,但我似乎无法找到一种方法来迭代仅 5 个元素而不是所有元素,例如使用 Iterator

基本上我有一个地图声明如下:Map<String, Integer> infl_numbers = new HashMap<>();

我想做这样的事情:

for (short i =0;i<5;i++){
    // element = get i-th element of the Map
    // list.add(element)
}

谁能帮帮我?

您不能直接在地图上对索引 (i = 0..4) 执行任何操作,因为地图通常是无序的。与集合相同。所以你所能做的就是开始处理地图,得到你得到的任何项目,然后在你得到 5 个项目后停止:

int count = 0;
for (String key : infl_numbers.keySet()) {
    list.add(infl_numbers.get(key))
    count++;
    if (count == 5)
        break;
}

有些类型的地图需要订购。因此,如果您有对其中之一的引用而不仅仅是对 Map 的引用,情况就不同了,并且取决于您正在处理的 Map 的子类型。

HashMap是这个要求的错误class。由于 HashMap 中的元素没有排序,您每次可能会得到一组不同的五个元素。您应该使用 LinkedHashMap 来维护插入顺序。然后,您可以迭代键集并在计数器的帮助下获得前五个元素,例如

import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;

public class Main {
    public static void main(String[] args) {
        Map<String, Integer> map = new LinkedHashMap<>();
        map.put("One", 1);
        map.put("Two", 2);
        map.put("Three", 3);
        map.put("Four", 4);
        map.put("Five", 5);
        map.put("Six", 6);
        map.put("Seven", 7);
        map.put("Eight", 8);
        map.put("Nine", 9);
        map.put("Ten", 10);

        // Access first five elements
        int count = 0;
        Iterator<String> itr = map.keySet().iterator();
        while (itr.hasNext() && count < 5) {
            System.out.println(map.get(itr.next()));
            count++;
        }
    }
}

输出:

1
2
3
4
5