【问题标题】:Java iterate map from a certain indexJava从某个索引迭代映射
【发布时间】:2011-11-26 17:46:03
【问题描述】:

我有一个根据我需要解析的顺序排序的 json 字符串创建的地图。

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

有没有办法做到这一点?

【问题讨论】:

    标签: java map loops


    【解决方案1】:

    Map 通常不维护键的顺序。您需要使用

    • 一个NavigableMap,如TreeMap。如果您的键具有自然顺序,则最好使用。
    • LinkedHashMap 是一个保留插入顺序的映射实现。

    示例 sn-p (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
    

    示例 sn-p (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 正是我所需要的,索引解析完美!
    【解决方案2】:
    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 实现已排序 - 否则枚举时无法保证顺序。

    【讨论】:

      【解决方案3】:

      根据底层地图实现,在解析时顺序已经丢失。

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

      【讨论】:

        猜你喜欢
        • 2019-05-25
        • 2016-01-31
        • 1970-01-01
        • 2015-02-11
        • 1970-01-01
        • 2012-07-17
        • 2021-04-15
        • 2011-07-31
        • 1970-01-01
        相关资源
        最近更新 更多