集合的优化操作

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
 
posted @ 2019-07-30 19:48  坚持的力量々  阅读(322)  评论(0编辑  收藏  举报