集合必备面试题的问题以及答案:

本文探讨了在Java中集合与数组的使用场景和优缺点,包括ArrayList和LinkedList的区别,以及线程安全的集合类如Vector、HashTable。在选择存储数据结构时,考虑是否需要动态扩容、数据访问速度以及线程安全性等因素至关重要。

1.为什么要使用集合?

当我们需要存储一组类型相同的数据的时,我们首先想到的存储容器就是数组,但是使用数组存储对象的话就存在一定的弊端,因为在实际的开发过程中,我们需要存储的数据类型是多种多样的,而数组的缺点也是十分明显的,其一数组的长度一旦声明不可改变,其二声明数组时的数据类型直接会直接决定该数组将要存储的数据的类型,其三数组存储的数据时有序可重复的。但是集合就不一样了,集合的类型多种多样,存储数据也是十分灵活,Java集合可以存储有序可重复的元素,也可以存储有序不可重复的元素,也可以存储无序不可重复的元素,也可以存储键值对类型的元素,还可以存储不同类型不同数量的对象。

2.33Array和ArrayList有何区别?什么时候更适合用Array?

Array可以容纳基本类型和对象,而ArrayList只能容纳对象。

Array是指定大小的,而ArrayList大小是固定的。

Array没有提供ArrayList那么多功能,比如addAll、removeAll和iterator等。尽管ArrayList明显是更好的选择,但也有些时候Array比较好用。

1.如果列表的大小已经指定,大部分情况下是存储和遍历它们。

2.对于遍历基本数据类型,尽管Collections使用自动装箱来减轻编码任务,在指定大小的基本类型的列表上工作也会变得很慢。

3.如果你要使用多维数组,使用[][]比List<List<>>更容易。

3.ArrayList和LinkedList有何区别?

ArrayList和LinkedList两者都实现了List接口,但是它们之间有些不同。

1.ArrayList是由Array所支持的基于一个索引的数据结构,所以它提供对元素的随机访问,复杂度为O(1),但LinkedList存储一系列的节点数据,每个节点都与前一个和下一个节点相连接。所以,尽管有使用索引获取元素的方法,内部实现是从起始点开始遍历,遍历到索引的节点然后返回元素,时间复杂度为O(n),比ArrayList要慢。

2.与ArrayList相比,在LinkedList中插入、添加和删除一个元素会更快,因为在一个元素被插入到中间的时候,不会涉及改变数组的大小,或更新索引。

3.LinkedList比ArrayList消耗更多的内存,因为LinkedList中的每个节点存储了前后节点的引用。

4.哪些集合类是线程安全的?

Vector、HashTable、Properties和Stack是同步类,所以它们是线程安全的,可以在多线程环境下使用。Java1.5并发API包括一些集合类,允许迭代时修改,因为它们都工作在集合的克隆上,所以它们在多线程环境中是安全的。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是小陈呀~

您的鼓励是我最大的动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值