zoukankan      html  css  js  c++  java
  • 数据结构对性能的影响

    今天看服务端性能优化几个有用的地方记录下来:

    问题代码:

    Map<Integer,Integer> map= new HashMap<Integer,Integer>();

    for (int k=0;k<100000,k++){

      map.put(k,k);

    }

    for(String key:map.keySet()){

      String value = map.get(key);

    }

    1 Resize问题

    HashMap要根据已知元素数量进行初始化,否则会在数据Put的时候进行resize多次,在执行resize时需要创建新的数组,并且重新执行元素的hash,老数组又要回收,对GC和CPU都不友好。

    2 多余的hash运算问题

    循环取元素用keySet,而没有使用EntrySet。

    查了一下,意思是keyset其实遍历了2遍,一次转为Interator对象,另一次从hashmap中取出key对应的value;而EntrySet只遍历一遍,就把key value 放在Entry中,效率更高。jdk8可用map.foreach

    PS :

      hash算法减少碰撞/冲突的做法:hashmap数组初始化大小是2的指数幂

      hashmap中元素个数超过数组大小的loadfactor时会扩容,loadfactor默认值是0.75。比如数组大小16,则超过16*0.75=12时,会扩展为16*2=32

  • 相关阅读:
    每日日报2021.4.14
    每日日报2021.4.13
    每日日报2021.4.12
    每日日报2021.4.9
    每日日报2021.4.8
    每日日报2021.4.7
    每日日报2021.4.6
    每日日报2021 4/22
    每日日报2021 4/21
    每日日报2021 4/20
  • 原文地址:https://www.cnblogs.com/huangxiaoying/p/12392156.html
Copyright © 2011-2022 走看看