此文已由作者赵计刚授权网易云社区发布。

欢迎访问网易云社区,了解更多网易技术产品运营经验。

1、ArrayList

  • 非线程安全

  • 基于对象数组

  • get(int index)不需要遍历数组,速度快;

  • iterator()方法中调用了get(int index),所以速度也快

  • set(int index, E e)不需要遍历数组,速度快

  • add方法需要考虑扩容与数组复制问题,速度慢

  • remove(Object o)需要遍历数组,并复制数组元素,速度慢

  • remove(int index)不需要遍历数组,需要复制数组元素,但不常用

  • contain(E)需要遍历数组

2、LinkedList

  • 非线程安全

  • 基于环形双向链表

  • get(int index)需要遍历链表,速度慢;

  • iterator()方法中调用了get(int index),所以速度也慢

  • set(int index, E e)方法中调用了get(int index),所以速度也慢

  • add方法不需要考虑扩容与数组复制问题,只需创建新对象,再将新对象的前后节点的指针指向重新分配一下就好,速度快

  • remove(Object o)需要遍历链表,但不需要复制元素,只需将所要删除的对象的前后节点的指针指向重新分配一下以及将所要删除的对象的三个属性置空即可,速度快

  • remove(int index)需要遍历链表,但不需要复制元素,只需将所要删除的对象的前后节点的指针指向重新分配一下以及将所要删除的对象的三个属性置空即可,但不常用

  • contain(E)需要遍历链表

3、Vector(线程安全的ArrayList)

  • 线程安全

  • 扩容机制与ArrayList不同

4、Stack(继承于Vector)

  • 线程安全

  • 效率低下,可采用双端队列Deque或LinkedList来实现,Deque用的较多

总结:

  • 在查询(get)、遍历(iterator)、修改(set)使用的比较多的情况下,用ArrayList

  • 在增加(add)、删除(remove)使用比较多的情况下,用LinkedList

  • 在需要线程安全而且对效率要求比较低的情况下,使用Vector,当然,实现ArrayList线程安全的方法也有很多,以后再说

  • 在需要使用栈结构的情况下,使用Deque,Stack废弃就行了

免费领取验证码、内容安全、短信发送、直播点播体验包及云服务器等套餐

更多网易技术、产品、运营经验分享请点击

相关文章:
【推荐】 从golang的垃圾回收说起(下篇)

最新文章

  1. 真正解决vbox不能为虚拟电脑打开一个新任务的解决方法
  2. S3C6410开发板开发环境的搭建
  3. mac 下打开多个Eclipse
  4. 如何配置pl/sql (本地客户端)连接远程oracle服务器
  5. android 学习运用海马模拟器教程与android环境的搭建
  6. 【转】Unity3D的输入(Input)——键盘和鼠标
  7. Uva 10167 - Birthday Cake 暴力枚举 随机
  8. Git教程(5)常用技巧之本地分支
  9. Java日志记录的5条规则
  10. javax.net.ssl.SSLException: java.lang.UnsupportedOperationException
  11. ExtJs4.0入门错误
  12. scala 函数编程
  13. 在jquery中each循环中,要用return false代替break,return true代替continue。
  14. ORACLE概要文件
  15. 《程序设计语言——实践之路【PDF】下载
  16. Android--MP3播放器MediaPlayer
  17. Oracle 动态sql
  18. 04PHP HTML状态保持
  19. IE在开发工具启动的情况下(打开F12)时 JS才能执行
  20. js parseInt()与Number()区别

热门文章

  1. qr 生成二维码
  2. centOS 6.5下升级mysql,从5.1升级到5.6
  3. 使用vmware安装ubuntu不能上网
  4. 内存溢出和内存泄漏的区别(ZZ)
  5. SpringMVC学习笔记:数据的接收与返回
  6. WebSocket 长连接 及超时问题解决
  7. 锋利的jQuery(第二版)学习总结
  8. TensorFlow 实现 RNN 入门教程
  9. 调试问题集之——Max10中配置完成后程序不能运行
  10. Silverlight子窗口(ChildWindow)传递参数到父窗口演示