【问题标题】:Iterator in java.util.Mapjava.util.Map 中的迭代器
【发布时间】:2014-10-02 22:06:21
【问题描述】:

使用 Map 创建了一个简单的 java 应用程序来存储一些数据,然后迭代并打印键值。

Map<String,String> myMap = new HashMap<String,String>();
    myMap.put("1", "1");
    myMap.put("2", "2");
    myMap.put("3", "3");
    myMap.put("4", "4");

    Iterator<String> it1 = myMap.keySet().iterator();
    while(it1.hasNext()){
        String key = it1.next();
        System.out.println("Map key: "+key + "    Map Value:"+myMap.get(key));
       /* if(key.equals("2")){
            myMap.put("1","4");
            //myMap.put("4", "4");
        }*/
    }

即使我尝试使用不同的组合更改 put 方法,例如

    myMap.put("4", "4");
    myMap.put("1", "1");
    myMap.put("3", "3");
    myMap.put("2", "2");

但我不明白为什么我的程序总是以降序显示前 3 个对象。我无法追踪迭代器使用的排序方式..

Map key: 3    Map Value:3
Map key: 2    Map Value:2
Map key: 1    Map Value:1
Map key: 4    Map Value:4

【问题讨论】:

标签: java map iterator


【解决方案1】:

不保证您从HashMap 接收元素的顺序。它所做的唯一保证是每次插入重复项都会被拒绝(因此,您会得到一组唯一项)。

如果您想要两者保证,您需要使用LinkedHashMap 来代替,它可以保证插入顺序。

【讨论】:

    【解决方案2】:

    HashMap 不保证元素的顺序

    如果需要订购,请使用LinkedHashMap(entry order)TreeMap (sorted order)

    【讨论】:

      【解决方案3】:

      因为HashMap 使用Hashing 函数来存储元素.. 顺序由哈希函数决定..
      简而言之,Hasing 函数返回存储元素的内存位置。

      更多详情click

      【讨论】:

        猜你喜欢
        • 2010-11-30
        • 1970-01-01
        • 1970-01-01
        • 2012-03-23
        • 2014-03-25
        • 1970-01-01
        • 1970-01-01
        • 2018-05-16
        • 2017-11-11
        相关资源
        最近更新 更多