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