谁动了我的代码

抽象即是空,空即是抽象。
posts(43) comments(24) trackbacks(0)
  • BlogJava
  • 联系
  • RSS 2.0 Feed 聚合
  • 管理

News

所有文章版权归我所有,转载请注明出处,谢谢!

常用链接

  • 我的随笔
  • 我的评论
  • 我的参与
  • 最新评论

留言簿

  • 给我留言
  • 查看公开留言
  • 查看私人留言

随笔分类

  • Android开发(5)
  • C/C++(1)
  • DataBase(3)
  • Java(16)
  • JavaScript(14)
  • WEB前端(1)
  • 编程杂项(2)
  • 网络(1)

随笔档案

  • 2016年5月 (1)
  • 2011年2月 (1)
  • 2010年6月 (3)
  • 2010年5月 (1)
  • 2009年12月 (2)
  • 2009年11月 (1)
  • 2009年10月 (2)
  • 2009年6月 (2)
  • 2009年5月 (1)
  • 2009年4月 (2)
  • 2009年3月 (4)
  • 2009年2月 (1)
  • 2009年1月 (1)
  • 2008年12月 (1)
  • 2008年11月 (1)
  • 2008年10月 (4)
  • 2008年9月 (2)
  • 2008年5月 (5)
  • 2008年3月 (3)
  • 2007年12月 (2)
  • 2007年10月 (1)
  • 2007年9月 (2)
  • 2007年5月 (1)

搜索

  •  

最新评论

  • 1. re: Android之ImageView载入网络上的图片
  • 222222222222222222222
  • --2222222222222222222222222222
  • 2. re: Log4j自带Log Viewer的用法
  • 执行你的根本不行,乱错帖子就在这乱贴,tmd
  • --asdf
  • 3. re: Android之使用私有存储
  • getDir方法创建的文件,会有个app_前缀,请问这怎么去掉呢?
  • --就是宝宝
  • 4. re: Android通用事件造成的生命周期变化情况
  • 我相信以后Android将成为越来越多设备的OS,不光是手持上网设置,冰箱、洗衣机都有可能采用Android。
  • --淘宝网女装春装新款
  • 5. re: Android通用事件造成的生命周期变化情况
  • 不错
  • --歌瑞尔内衣

阅读排行榜

评论排行榜

View Post

Java集合框架使用注意事项(一, List)

List的有用实现
1.ArrayList
2.LinkedList
3.Vector
4.Stack

讨论1:底层机制(牵扯到的数据结构的知识请读者自行复习)
ArrayList与Vector都是基于数组实现的,这就说明ArrayList与Vector适合做遍历而不适合做频繁的插入和删除。
LinkedList是基于链表实现的,所以它生来就是为了频繁插入与删除对象。

讨论2:特殊功能
Stack是一个后进先出(LIFO)对象堆栈,而LinkedList除可以被用作堆栈外,还可以被用作队列或双端队列。
不同的是Stack继承自Vector,也就是说它也是基于数组实现的。

讨论3:内存占用
基于数组实现的List,在动态扩展时会产生新的数组,然后把旧数组里的内容复制到新数组里,
这会产生大量的不再被使用的对象引用变量等待系统回收。而基于链表实现的List就不会有这种问题。

讨论4:同步问题
Vector与Stack生来就是同步的, 而ArrayList与LinkedList需要使用Collections.synchronizedList(List list)方法来转换成同步List。
从它们的对象上返回的迭代器是快速失败的,也就是说在使用迭代器进行迭代的时候,必须使用迭代器本身的remove、add、set
方法来添加或更改List元素,如果在迭代的同时,在其他线程中从结构上修改了List(结构上的修改是指任何添加或删除一个或多个元素的操作,或者显式调整底层数组的大小;仅仅设置元素的值不是结构上的修改),快速失败迭代器会尽最大努力抛出ConcurrentModificationException。

讨论5:使用策略
如果数据被从数据源提取,数据量不确定,该数据一经被提取后就几乎不会再添加或删除,那么应该建立一个LinkedList来保存从数据源中取出的数据,然后将该LinkedList转换成ArrayList来优化遍历操作。反过来,数据量确定的数据从数据源取出可以先建立一个ArrayList来保存,根据需要如需频繁增删,就转换为LinkedList,如频繁遍历就不需转换。
转换的方法就是使用对应的List类来封装目标List对象。如
ArrayList al = new ArrayList();
LinkedList ll = new LinkedList(al);
同理反过来也可以
LinkedList ll = new LinkedList();
ArrayList al = new ArrayList(ll);

讨论6:toArray()方法
基于数组实现的List会直接返回一个底层数组的拷贝(使用了System.arraycopy方法),基于链表实现的List会新生成一个数组。

讨论7:不可修改
通过使用Collections.unmodifiableList(List list)来生成一个不可修改的List,试图修改返回的列表,不管是直接修改还是通过其迭代器进行修改,都将导致抛出UnsupportedOperationException。

讨论8:遍历器
请尽量使用Iterator,Enumeration已不被鼓励使用。

最后,请参考java.util.Collections类,该类提供了很多有用的操纵集合对象的方法。





posted on 2008-10-22 11:22 Eric Song 阅读(2432) 评论(1)  编辑  收藏 所属分类: Java

View Comments

# re: Java集合框架使用注意事项(一, List)  回复  更多评论   
不错, 赞一个
2008-10-24 10:43 | HenryFour
新用户注册  刷新评论列表  

只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问   管理
相关文章:
  • Java偏向锁实现原理讲解(Biased Locking)
  • Tomcat乱码问题研究,附带AJAX乱码问题研究。
  • jad和Java Decompiler的小小不同
  • Log4J基本使用教程
  • 使用Java范型需要注意的地方
  • Java事件传递技术 (链接至IBM网站)
  • Java集合框架使用注意事项(二,Map)
  • Java集合框架使用注意事项(一, List)
  • Tomcat对Servlet及JSP规范支持的情况
  • Java 5.0的新特性
 
 
Powered by:
BlogJava
Copyright © Eric Song