各们大哥们,有一问题,想要求教:当HashMap如果用int当key的话用for each语句打出所有元素时就是有序的,如果用别的类型是乱序的!
我也知道光用System.out.println打也是有序的,可是为什么for each就是行呢?难道是for each是随机遍历?那用int做key又怎么解释呢?

解决方案 »

  1.   

    Set都是无序的,无论是Map.keySet()还是Map.entrySet() ,碰巧而已
      

  2.   

    不能吧,我加了8个素还是那样,只要是int做key一定是有序的!
      

  3.   

    HashMap是不会排序的,你这不过是巧合而已。
    如果想要排序的Map,可以用SortedMap。
      

  4.   

    ?不是我用了8个int做了一下KEY还是有序呀用别的类型就不是晕了。
      

  5.   

    HashMap遍历时的顺序是和key的hashCode有关
    对于int为key,hashCode即为key本身。
    貌似就出现这种情况了。
    其实即使用int做key,也未必就是按顺序的
    .测试代码如下import java.util.Arrays;
    import java.util.HashMap;public class Test {
    private HashMap<Integer, Integer> map = new HashMap<Integer, Integer>(16); private void add(int i) {
    map.put(i, i);
    } private void print() {
    System.out.println(Arrays.toString(map.values().toArray()));
    } /**
     * @param args
     */
    public static void main(String[] args) {
    Test t = new Test();
    for(int i=0;i<10;i++)
    t.add(i);
    t.print();//输出 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

    Test t2 = new Test();
    t2.add(12);
    t2.add(13);
    t2.add(16);
    t2.add(40);
    t2.print();//输出 [16, 40, 12, 13]
    }
    }