zoukankan      html  css  js  c++  java
  • 小议map排序问题

    map有序无序?如果说有序, 这个顺序是怎么定义的? 安装put的先后顺序吗? 还是被put元素的内容呢?

    经观察,应该是后者,跟put先后顺序无关, 跟内部实现有关(可能是hash排序的, 非大小排序)

    public static void main(String[] args) {
    
    // asfd();
    // TODO Auto-generated method stub
    Map<String, String> map = new ConcurrentHashMap<String, String>();
    //	 map.put("10.167.240.78", "aa");
    //	 map.put("10.167.240.61", "bb");
    //	 map.put("10.167.240.46", "dd");
    //	 map.put("10.167.240.54", "cc");
    
    map.put("205", "b");
    map.put("101", "b");
    map.put("201", "b");
    
    for (int i = 10; i > 0; i--) {
    // map.put(i+"", Math.random()+"");
    }
    
    System.out.println(map);
    
    }
    

      


    打印 :{201=b, 101=b, 205=b}


    如果是
    map.put("205", "b");
    map.put("101", "b");
    map.put("201", "b");
    (把205改成25)
    则打印:
    {201=b, 101=b, 25=b}

    而且发现ConcurrentHashMap和HashMap的表现也不同 —— 内部的hash算法还有细节上的区别吗?

    ===============

    参照http://kenkao.iteye.com/blog/1812283

    List按对象进入的顺序保存对象,不做排序或编辑操作。Set对每个对象只接受一次,并使用自己内部的排序方法(通常,你只关心某个元素是否属于Set,而不关心它的顺序--否则应该使用List)。Map同样对每个元素保存一份,但这是基于"键"的,Map也有内置的排序,因而不关心元素添加的顺序。如果添加元素的顺序对你很重要,应该使用 LinkedHashSet或者LinkedHashMap.

     小结:

    1 List按对象进入的顺序保存对象, Set、 Map不是它们各有内部排序算法

    2 List容许有重复值, Set不容许; Map不容许有重复key值。

    3 List、Set、 Map各自的不同实现,效率有所不同,侧重不同

    4对于存储于Set内的元素x,我们需要对x重写其hashCode方法——我们在重写对象的equals方法时,必须重写hashCode——就是说,equals不等,则hashCode不同,反之亦然

    —— 这个Set 或者 HashSet好像用的很少吧,我工作这么久都没用过一样。。。

    一般就是ArrayList、HashMap。。。 

  • 相关阅读:
    Python的Crypto模块使用:自动输入Shell中的密码
    算法之动态规划初步(Java版)
    基于ZXing的二维码,你可以这样改造它
    Java字符编码的转化问题
    第一个Hadoop程序——WordCount
    Hadoop的学习前奏(二)——Hadoop集群的配置
    Linux下的一些问题收集及解决方法(二)
    Python的捕虫笔记
    Hadoop的学习前奏(一)——在Linux上安装与配置Hadoop
    Android SnackBar:你值得拥有的信息提示控件
  • 原文地址:https://www.cnblogs.com/FlyAway2013/p/3550431.html
Copyright © 2011-2022 走看看