zoukankan      html  css  js  c++  java
  • 集合的优化操作

    1、实现RandomAccess接口的集合使用fori遍历

    先谈谈List集合的遍历方式,有三种:foreach、iterator、fori。

    1. ArrayList和Vector集合内部实现由 数组实现,所以随机访问的速度是很快的。对于可以进行随机访问的List,JDK为它们实现了RandomAccess接口,表示支持快速随机访问。
    2. 对LinkedList等以 链表实现 的集合遍历时使用foreach或者iterator性能最佳,因为foreach的底层实现就是通过iterator实现的。

    2、预知容量的情况下构造ArrayList时尽量指定初始大小

    ArrayList内部的扩容策略是当其所存储的元素数量超过它已有的大小时,它就会以1.5倍的容量进行扩容,也就是假如当前ArrayList的容量为10000,那么它在需要再存储一个元素时,即第10001个元素,由于容量不够而进行一次扩容,而ArrayList扩容后的容量则变为了15000,而多出了一个元素就多了5000个元素的空间,这太浪费内存资源了,而且扩容还会导致整个数组进行一次内存复制,而ArrayList集合默认大小为10,因此合理的设置ArrayList的容量可避免集合进行扩容。 
     
    而Vector内部扩容策略为按需扩容,每次+1。 
     
      同样,在众多Map集合中也有各自扩容策略,比如HashMap每次扩容时新容量等于原始的容量*2。在我们常用做字符串拼接的StringBuffer和StringBuilder内部,实际上也是有扩容策略,默认为扩容为原始的1.5倍。 
      
      所以,在这些需要扩容的api上,如果预先知道了数据的大小,则预先设置,这样不仅可以避免 扩容导致的空间浪费,而且还可避免内部调用System.arraycopy()进行 大量数据复制

    .................持续补充中

    【参考】
    1. https://www.jianshu.com/p/92d8872fc101
     
    本文作学习交流用,如有错误,欢迎指正!
  • 相关阅读:
    pandas.DataFrame.to_excel
    python list [:1]
    python 读取文件
    pandas 中的常用数学计算
    神经网络相关术语
    keras初探
    机器学习相关
    Numpy random arange zeros
    numpy 常用函数
    【Redis学习之四】Redis数据类型 string
  • 原文地址:https://www.cnblogs.com/pan1042/p/11272312.html
Copyright © 2011-2022 走看看