HashMap无序?TreeMap有序?

今天学习Map集合时书上说HashMap是无序的,TreeMap是有序的(有序无序是针对key的),但是实际去敲的时候发现不是这样,有时HashMap是有序的,有时TreeMap是无序的。于是就做了以下测试来探究:

测试代码:

  		//第一组测试:HashMap和TreeMap的key都是String类型的
        Map<String, Integer> hashMap = new HashMap<String, Integer>();
        hashMap.put("8", 3);
        hashMap.put("9", 2);
        hashMap.put("10", 6);
        hashMap.put("11", 2);
        hashMap.put("12", 6);
        System.out.println("第一组测试:HashMap和TreeMap的key都是String类型的");
        System.out.println("HashMap:");
        System.out.println(hashMap);

        Map<String, Integer> treeMap = new TreeMap<String, Integer>();
        treeMap.put("8", 399);
        treeMap.put("9", 67);
        treeMap.put("10", 2);
        treeMap.put("11", 67);
        treeMap.put("12", 2);
        System.out.println("TreeMap:");
        System.out.println(treeMap);
        System.out.println();

        //第二组测试:HashMap和TreeMap的key都是Integer类型的
        Map<Integer, Integer> hashMap2 = new HashMap<Integer, Integer>();
        hashMap2.put(9, 67);
        hashMap2.put(10, 2);
        hashMap2.put(8, 399);
        hashMap2.put(11, 67);
        hashMap2.put(12, 2);
        System.out.println("第二组测试:HashMap和TreeMap的key都是Integer类型的");
        System.out.println("HashMap:");
        System.out.println(hashMap2);

        Map<Integer, Integer> treeMap2 = new TreeMap<Integer, Integer>();
        treeMap2.put(9, 67);
        treeMap2.put(10, 2);
        treeMap2.put(8, 399);
        treeMap2.put(11, 67);
        treeMap2.put(12, 2);
        System.out.println("TreeMap:");
        System.out.println(treeMap2);
        System.out.println();

        //第三组测试:HashMap和TreeMap的key都是String类型的,但是都是英文字母
        Map<String, Integer> hashMap3 = new HashMap<String, Integer>();
        hashMap3.put("apple", 1);
        hashMap3.put("orange", 2);
        hashMap3.put("pear", 3);
        System.out.println("第三组测试:HashMap和TreeMap的key都是String类型的,但是都是英文字母");
        System.out.println("HashMap:");
        System.out.println(hashMap3);

        Map<String, Integer> treeMap3 = new TreeMap<String, Integer>();
        treeMap3.put("apple", 1);
        treeMap3.put("orange", 2);
        treeMap3.put("pear", 3);
        System.out.println("TreeMap:");
        System.out.println(treeMap3);

运行结果:

第一组测试:HashMap和TreeMap的key都是String类型的
HashMap:
{11=2, 12=6, 8=3, 9=2, 10=6}
TreeMap:
{10=2, 11=67, 12=2, 8=399, 9=67}

第二组测试:HashMap和TreeMap的key都是Integer类型的
HashMap:
{8=399, 9=67, 10=2, 11=67, 12=2}
TreeMap:
{8=399, 9=67, 10=2, 11=67, 12=2}

第三组测试:HashMap和TreeMap的key都是String类型的,但是都是英文字母
HashMap:
{orange=2, apple=1, pear=3}
TreeMap:
{apple=1, orange=2, pear=3}

通过测试可以总结出:

当key值是Integer类型时,HashMap和TreeMap都是“有序”的;
当key值是String类型的数字时,HashMap和TreeMap都是“无序”的;
当key值是String类型的字母时,HashMap是“无序”的,TreeMap是有序的。

后来又去查了一下TreeMap是按照什么来排序的,结果:TreeMap按照key的字典顺序来排序(升序)
这样就对上了,之前感觉当key值是String类型的数字时,HashMap和TreeMap都是“无序”的,是因为如果按照数字排序的话确实是无序的,但是TreeMap所谓的有序并不是按照数字顺序,而是字典顺序。

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值