博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java高级篇 -- List选择及优化
阅读量:7011 次
发布时间:2019-06-28

本文共 973 字,大约阅读时间需要 3 分钟。

  hot3.png

在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提供的集合,不要自己书写功能类似的方法

转载于:https://my.oschina.net/yotoo/blog/260732

你可能感兴趣的文章
jquery中关于表格行的增删问题
查看>>
分布式事务,EventBus 解决方案:CAP【中文文档】
查看>>
GUI进化--数据与界面分离
查看>>
三级菜单实例
查看>>
Teleport Pro使用教程
查看>>
C# 如何生成CHM帮助文件
查看>>
Java编程的逻辑 (93) - 函数式数据处理 (下)
查看>>
一对多多对多的建表原则
查看>>
Maven详解(四)------ 常用的Maven命令
查看>>
可视化之Berkeley Earth
查看>>
线性表的顺序存储结构之顺序表类的实现_Java
查看>>
Hadoop的namenode的管理机制,工作机制和datanode的工作原理
查看>>
AX88772B 驱动移植
查看>>
array
查看>>
背水一战 Windows 10 (60) - 控件(媒体类): Pointer 涂鸦板, InkCanvas 涂鸦板
查看>>
[转]Repeat Page Header on each Page for reports SSRS
查看>>
一次误报引发的DNS检测方案的思考:DNS隧道检测平民解决方案
查看>>
Python操作SQLAlchemy之连表操作
查看>>
什么是架构师?
查看>>
layer.alert自定义关闭回调事件
查看>>