Java从指定索引遍历map

3

我有一张从json字符串创建的地图,按照需要解析的顺序排序。

如果在第6个索引(第7个键)处有一个键,则我希望能够从此键迭代到地图的末尾,并对这些键/值对进行必要的处理。

是否有任何方法可以实现这一点?

3个回答

8

Map 一般不会维护键的顺序。您需要使用下列方法:

  • NavigableMap,例如 TreeMap。如果您的键具有自然顺序,则此方法更好。
  • LinkedHashMap 是保留插入顺序的映射实现方法。

示例代码片段(使用 LinkedHashMap):

Map<Integer, String> map = new LinkedHashMap<Integer, String>();

map.put(1, "one");
map.put(2, "two");
map.put(3, "three");
map.put(4, "four");
map.put(5, "five");
map.put(6, "six");
map.put(7, "seven");
map.put(8, "eight");
map.put(9, "nine");

int index = 0;
for (Integer key : map.keySet()) {
    if (index++ < 6)
        continue;

    System.out.println(map.get(key));
}

// Prints:
//     seven
//     eight
//     nine

示例代码片段(TreeMap):

TreeMap<Integer, String> map = new TreeMap<Integer, String>();

map.put(5, "five");
map.put(6, "six");
map.put(7, "seven");
map.put(8, "eight");
map.put(9, "nine");

for (Integer key : map.tailMap(6).keySet())
    System.out.println(map.get(key));

// Prints
//     six
//     seven
//     eight
//     nine

LinkedHashMap正是我所需要的,而索引解析也完美运作! - pm13

0
The Map interface doesn't allow direct access by index. The best you can do is something like:

Map m;
....
int count 0;
for(object el : m){ 
    if(count++ < 6) continue;
    //do your stuff here
}

这假设你的Map实现是有序的 - 否则在枚举时没有保证顺序。


0

根据底层地图实现的不同,当其被解析时,顺序可能已经丢失。

LinkedHashMap是你想要的解决方案 - Linked部分为你提供了可预测的迭代顺序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接