Java高级篇 -- List选择及优化
2014-05-05 00:00
190 查看
摘要: Java性能优化,List选择及优化
在java编程中,我们常常使用到java自带的集合类List
以下为几点简单的优化建议:
1.Vector还是ArrayList
Vector有其特有有点,其每个方法都为同步方法【synchronized】,所以是线程安全的,在多线程环境下,若多个进程同时访问受保护资源,用Vector就显得十分简洁,安全。
ArrayList为非线程安全的,若不是多线程环境,或多线程环境下资源不需要写、更新,只需要读取,使用,或资源不需要受保护,使用ArrayList就大大提高了效率。
线程安全的散列表将本来可以并行处理的任务进行排队,串行处理。
同样:Hashtable是线程安全的,HashMap是非线程安全的
2.设置ArrayList初始化容量
ArrayList不断增长过程中会自动扩增其空间,这无疑耗费一定的资源,时间。
如果已经预料到ArrayList将是一个很大的数组,并且你预料到它将变得异常庞大,可预先设置数组的大小,可以提高添加新元素的速度,并优化性能。
原来ArrayList list=new ArrayList();
现在ArrayList list=new ArrayList();
list.ensureCapacity(N);
3.ArrayList与LinkedList
二者功能相当,但内部实现的数据结构不同
ArrayList通过object[]实现,LinkedList通过链表。
由此易得:
ArrayList:随机访问,顺序添加效率均高于LinkedList,只要用于变动较小的集合存储
对其添加、删除某位置元素,将移动所有后方元素,效率太低
LinkedList:在某个位置增删效率较高,用于变动较为频繁的集合存储
4.遍历
若List不发生大小变动【循环中无remove,add操作】,即不用每次检测其大小
原来:
for (int i = 0; i < vector.size (); i++)
改为:
for (int i = 0,n=list.size (); i < n; i++)
不用每次循环都检测其大小,效率将大大提高
5.使用
除非十分必要,否则尽量使用java提供的集合,不要自己书写功能类似的方法
在java编程中,我们常常使用到java自带的集合类List
以下为几点简单的优化建议:
1.Vector还是ArrayList
Vector有其特有有点,其每个方法都为同步方法【synchronized】,所以是线程安全的,在多线程环境下,若多个进程同时访问受保护资源,用Vector就显得十分简洁,安全。
ArrayList为非线程安全的,若不是多线程环境,或多线程环境下资源不需要写、更新,只需要读取,使用,或资源不需要受保护,使用ArrayList就大大提高了效率。
线程安全的散列表将本来可以并行处理的任务进行排队,串行处理。
同样:Hashtable是线程安全的,HashMap是非线程安全的
2.设置ArrayList初始化容量
ArrayList不断增长过程中会自动扩增其空间,这无疑耗费一定的资源,时间。
如果已经预料到ArrayList将是一个很大的数组,并且你预料到它将变得异常庞大,可预先设置数组的大小,可以提高添加新元素的速度,并优化性能。
原来ArrayList list=new ArrayList();
现在ArrayList list=new ArrayList();
list.ensureCapacity(N);
3.ArrayList与LinkedList
二者功能相当,但内部实现的数据结构不同
ArrayList通过object[]实现,LinkedList通过链表。
由此易得:
ArrayList:随机访问,顺序添加效率均高于LinkedList,只要用于变动较小的集合存储
对其添加、删除某位置元素,将移动所有后方元素,效率太低
LinkedList:在某个位置增删效率较高,用于变动较为频繁的集合存储
4.遍历
若List不发生大小变动【循环中无remove,add操作】,即不用每次检测其大小
原来:
for (int i = 0; i < vector.size (); i++)
改为:
for (int i = 0,n=list.size (); i < n; i++)
不用每次循环都检测其大小,效率将大大提高
5.使用
除非十分必要,否则尽量使用java提供的集合,不要自己书写功能类似的方法
相关文章推荐
- Java高级篇 -- List选择及优化
- Java高级篇 -- List选择及优化
- java性能优化--List选择及优化
- Java性能优化-Arraylist与Linkedlist整改查性能比较的简介与内容
- 【Java】两个 List 遍历匹配数据的优化处理
- CoreJava学习4——集合之List高级与算法
- ALGO-4 结点选择 — 树型动态规划(java再优化版)
- JAVA高级:选择JSF不选Struts的十大理由
- 如何选择 Java中的Map List Set等集合类
- JAVA 集合框架优化之list.removeAll大数据量优化
- java高级特性和核心优化gc
- JAVA基础再回首(十一)——数组高级(冒泡排序和选择排序)、Arrays类、基本类型包装类、Integer类
- 如何在Java中选择Map/List/Set
- 如何在Java中选择Map/List/Set
- java集合list接口下的ArrayList,LinkedList的性能选择
- Java优化编程--核心类与性能 Vector ArrayList LinkedList String
- java实现选择、插入、归并、快速排序以及优化
- Java开发中如何选择Set、List、Map、数组
- Java List中的一个List选择选择移除方法
- 详细描述Java高级优化技术及里氏置换原则(Liskov Substitution Principle)