没有合适的资源?快使用搜索试试~ 我知道了~
第8讲 对比Vector、ArrayList、LinkedList有何区别1
需积分: 0 0 下载量 182 浏览量
2022-08-03
18:54:35
上传
评论
收藏 2.39MB PDF 举报
温馨提示
试读
11页
介绍),当处理的数据集比较小的时候,差距不明显,甚至还表现差一点;但是,当数据集增长到数万或百万以上时,提高就非常大了,具体还是取决于处理器和系统环境。排序算法
资源推荐
资源详情
资源评论
2018/5/26 极客时间 | Java核心技术36讲
https://time.geekbang.org/column/article/7810 1/11
第8讲 | 对比Vector、ArrayList、LinkedList有何区别?
2018-05-22 杨晓峰
第8讲 | 对比Vector、ArrayList、LinkedList有何区别?
朗读人:黄洲君 12′45′′ | 5.84M
我们在日常的工作中,能够高效地管理和操作数据是非常重要的。由于每个编程语言支持的数据
结构不尽相同,比如我最早学习的 C 语言,需要自己实现很多基础数据结构,管理和操作会比
较麻烦。相比之下,Java 则要方便的多,针对通用场景的需求,Java 提供了强大的集合框架,
大大提高了开发者的生产力。
今天我要问你的是有关集合框架方面的问题,对比 Vector、ArrayList、LinkedList 有何区别?
典型回答
这三者都是实现集合框架中的 List,也就是所谓的有序集合,因此具体功能也比较近似,比如都
提供按照位置进行定位、添加或者删除的操作,都提供迭代器以遍历其内容等。但因为具体的设
计区别,在行为、性能、线程安全等方面,表现又有很大不同。
Verctor 是 Java 早期提供的线程安全的动态数组,如果不需要线程安全,并不建议选择,毕竟
同步是有额外开销的。Vector 内部是使用对象数组来保存数据,可以根据需要自动的增加容
量,当数组已满时,会创建新的数组,并拷贝原有数组数据。
2018/5/26 极客时间 | Java核心技术36讲
https://time.geekbang.org/column/article/7810 2/11
ArrayList 是应用更加广泛的动态数组实现,它本身不是线程安全的,所以性能要好很多。与
Vector 近似,ArrayList 也是可以根据需要调整容量,不过两者的调整逻辑有所区别,Vector
在扩容时会提高 1 倍,而 ArrayList 则是增加 50%。
LinkedList 顾名思义是 Java 提供的双向链表,所以它不需要像上面两种那样调整容量,它也不
是线程安全的。
考点分析
似乎从我接触 Java 开始,这个问题就一直是经典的面试题,前面我的回答覆盖了三者的一些基
本的设计和实现。
一般来说,也可以补充一下不同容器类型适合的场景:
Vector 和 ArrayList 作为动态数组,其内部元素以数组形式顺序存储的,所以非常适合随机
访问的场合。除了尾部插入和删除元素,往往性能会相对较差,比如我们在中间位置插入一
个元素,需要移动后续所有元素。
而 LinkedList 进行节点插入、删除却要高效得多,但是随机访问性能则要比动态数组慢。
所以,在应用开发中,如果事先可以估计到,应用操作是偏向于插入、删除,还是随机访问较
多,就可以针对性的进行选择。这也是面试最常见的一个考察角度,给定一个场景,选择适合的
数据结构,所以对于这种典型选择一定要掌握清楚。
考察 Java 集合框架,我觉得有很多方面需要掌握:
Java 集合框架的设计结构,至少要有一个整体印象。
Java 提供的主要容器(集合和 Map)类型,了解或掌握对应的数据结构、算法,思考具体
技术选择。
将问题扩展到性能、并发等领域。
集合框架的演进与发展。
作为 Java 专栏,我会在尽量围绕 Java 相关进行扩展,否则光是罗列集合部分涉及的数据结构
就要占用很大篇幅。这并不代表那些不重要,数据结构和算法是基本功,往往也是必考的点,有
些公司甚至以考察这些方面而非常知名(甚至是“臭名昭著”)。我这里以需要掌握典型排序算
法为例,你至少需要熟知:
内部排序,至少掌握基础算法如归并排序、交换排序(冒泡、快排)、选择排序、插入排序
等。
外部排序,掌握利用内存和外部存储处理超大数据集,至少要理解过程和思路。
2018/5/26 极客时间 | Java核心技术36讲
https://time.geekbang.org/column/article/7810 3/11
考察算法不仅仅是如何简单实现,面试官往往会刨根问底,比如哪些是排序是不稳定的呢(快
排、堆排),或者思考稳定意味着什么;对不同数据集,各种排序的最好或最差情况;从某个角
度如何进一步优化(比如空间占用,假设业务场景需要最小辅助空间,这个角度堆排序就比归并
优异)等,从简单的了解,到进一步的思考,面试官通常还会观察面试者处理问题和沟通时的思
路。
以上只是一个方面的例子,建议学习相关书籍,如《算法导论》《编程珠玑》等,或相关教程。
对于特定领域,比如推荐系统,建议咨询领域专家。单纯从面试的角度,很多朋友推荐使用一些
算法网站如 LeetCode 等,帮助复习和准备面试,但坦白说我并没有刷过这些算法题,这也是
仁者见仁智者见智的事情,招聘时我更倾向于考察面试者自身最擅长的东西,免得招到纯面试高
手。
知识扩展
我们先一起来理解集合框架的整体设计,为了有个直观的印象,我画了一个简要的类图。注意,
为了避免混淆,我这里没有把 java.util.concurrent 下面的线程安全容器添加进来;也没有列出
Map 容器,虽然通常概念上我们也会把 Map 作为集合框架的一部分,但是它本身并不是真正
的集合(Collection)。
所以,我今天主要围绕狭义的集合框架,其他都会在专栏后面的内容进行讲解。
我们可以看到 Java 的集合框架,Collection 接口是所有集合的根,然后扩展开提供了三大类集
合,分别是:
List,也就是我们前面介绍最多的有序集合,它提供了方便的访问、插入、删除等操作。
剩余10页未读,继续阅读
资源评论
LauraKuang
- 粉丝: 17
- 资源: 335
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 王姿.html
- 51单片机学习(1)-软件keil下载
- 历届(第1-21届)希望杯数学竞赛初一试题及答案(最新整理).doc全国数学邀请赛(264页资料)
- 水滴.psd
- TokenPocket_V2.1.2_release.apk
- Apache-druid-kafka-rce.yaml
- 基于C#的ASP.NET数据库原理及应用技术课程指导平台的开发
- 基于ROS的智能车轨迹跟踪算法的仿真与设计源码运用PID跟踪算法.zip.zip
- Bug Bounty Tip - i春秋Self-XSS变废为宝的奇思妙想
- 1991-2015年全国初中化学竞赛复赛试题汇编(212页)(24年竞赛复赛真题).docx天原杯
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功