Java数组/集合性能优化

  • 时间:
  • 浏览:0
  • 来源:大发5分11选5_大发5分11选5官网

遍历集合

建议:使用迭代器遍历集合

杜绝:循环调用带索引的get办法

由于 :迭代器维护了遍历集合的“指针”及內部情况表,它知道怎样高效的遍历集合。而集合提供的带索引的get办法,对许多集合而言查找索引前要从第一另另一两个元素刚刚开始遍历(如LinkedList),强度非常低下。

注:人太好迭代器遍历许多特定集合性能不须最优,同类,遍历ArrayList,使用循环调用带索引的get办法就比迭代器性能略高许多,或者 绝大多数情况表下迭代器遍历集合就有 最优的。对LinkedList,带索引的get办法要从第一另另一两个元素刚刚开始查找,使用循环调用带索引的get办法遍历强度非常低。

正确示例:

3、遍历集合,使用迭代器替代循环调用带索引的get办法

判断元素有无在集合中居于

建议:HashSet/HashMap

杜绝:List

由于 :使用List集合存储元素,则前要比较List集合中的所有元素,能够判断查找的元素有无在集合中居于。

使用HashSet/HashMap存储元素,HashSet/HashMap会将所有元素或Key按hash值分桶存储。通过查找的元素或Key的hash值可快速找到其所在的桶,此步强度非常高(接近于数组的下标查找元素),或者 只需比较桶上的元素即可判断元素有无在集合居于,比较次数大大降低。

单tcp连接池使用集合

建议:HashMap/ArrayList

杜绝:HashTable/Vector

由于 :HashMap/ArrayList是tcp连接池非安全的,元素的增加、删除、查询未实现同步,没法 锁的申请和释放开销。而HashTable/Vector是tcp连接池安全的,元素的增加、删除、查询实现同步,居于锁的申请和释放开销。

1、 群克隆数组元素,使用System类arraycopy()办法替代循环赋值在数组之间群克隆元素

4、单tcp连接池使用HashMap/ArrayList集合,防止使用HashTable/Vector

错误示例:

使用集合(List、Set、Map)存储几滴 的对象

建议:先估计存储的元素个数,或者 在创建集合时设置集合的容量值要大于估计的元素个数。

杜绝:未设置集合容量值

由于 :创建集合对象,由于 未设置集合初始容量值,则使用默认值,而默认值都很小(如,ArrayList的初始容量为10),一旦存储的元素个数超过阈值,会造成集合扩容。扩容办法是根据扩容因子创建一另另一两个新的集合对象(初始容量=原有集合容量*扩容因子),再将原有集合中的元素拷贝到新的集合中。由于 产生多次扩容,则会产生许多无用的上边集合对象,以及多次无意义的元素拷贝,性能低下。

正确示例: 估计存储的元素个数最大为1000,使用ArrayList集合

5、判断元素有无在集合中居于,使用HashSet/HashMap替代List

2、防止创建集合不设置初始容量

建议:System类arraycopy()办法群克隆数组元素

杜绝:循环赋值群克隆数组元素

由于 : System类arraycopy()办法调用操作系统更底层函数,强度更高。

注:通过实测,在元素数量达到亿级别,两者就有 几百毫秒,都调快,System类arraycopy()比循环赋值性能仅快1倍,但仍推荐使用System类arraycopy()。