Java从某个索引迭代映射

时间:2011-09-28 09:55:56

标签: java map loops

我有一个从json字符串创建的映射,它按照我需要解析的顺序排序。

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

有没有这样做?

3 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分: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实现已排序 - 否则在枚举时没有保证的顺序。

答案 2 :(得分:0)

根据底层地图实现,解析时订单已经丢失。

LinkedHashMap是您追求的野兽 - 链接部分为您提供可预测的迭代顺序。