Map map=new HashMap();
map.put(1, "a");
map.put(2, "b");
map.put(3, "c");
Iterator it=map.keySet().iterator();
while(it.hasNext()){
Object key=it.next();
Object value=map.get(key);
System.out.println("key is "+key+" ,value is "+value);
}
这里的结果为什么显示的key is 2 ,value is b 而不是1-2-3的顺序?
                      key is 1 ,value is a
                      key is 3 ,value is c

解决方案 »

  1.   

    hashMap,存储的时候采用散列算法,从来没有说过保证存取的一致性。
    如果你要保持一致,使用实现了SortedMap接口的几个map类。常用的是TreeMap
      

  2.   

    map是无序的。所谓hash就是散列表。因为无序所以
    对于内存的分配来说是很好的。
    不像数组一定要连续的内存空间
      

  3.   

    map.keySet()得到是一个Set,Set里的元素是没有顺序的.
    往Map里放<key,value>时,要根据key用一个Hash函数计算一个空的地址,然后把<key,value>放进去,所以实际的放的位置和放进去的顺序没有关系.只和key有关系.HashMap本来就不重视key的顺序.如果你注重key的顺序,你可以用TreeMap
      

  4.   

    因为set()是无序的,你用map.keySet()得到的set里面包括的key是无序的,不一定就是你用map.put()放进去的顺序,所以遍历出来就是无序的
      

  5.   

    我也碰到过相同的问题。昨天刚敲的。
    先构造一个HashMap。
    然后使用TreeMap。构造方法见API文档。
      

  6.   

    楼上都对,是无序的,
    ArrayList 是有序的
      

  7.   

    map是无序的!!
    只有数组是有序的!要想按照添加顺序输出可以用 LinkedHashMap 
      

  8.   

    HashMap本来就不保证顺序
    如果你要保证顺序
    请用TreeMap和LinkedHashMap
    而且推荐你用泛型(1.5以后)
    LinkedHashMap<Integer, String>