数据结构对性能的影响

Posted huangxiaoying

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构对性能的影响相关的知识,希望对你有一定的参考价值。

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

问题代码:

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

以上是关于数据结构对性能的影响的主要内容,如果未能解决你的问题,请参考以下文章

sqlserver profiler 对数据库性能有影响吗

基于列数据类型的表连接对性能的影响

数据库表添加索引对性能的影响

什么对 SAS 数据集性能的影响更大 - 观察数或变量数?

HIVE查询性能-数据块大小

探究 Oracle 高水位对数据库性能影响