【Java集合刷题篇】从基础到实战,20道练习题帮你吃透List全家桶!
哈喽各位Java入门的宝子们~👋 上一篇刚把Collection和List的理论知识讲透,这篇直接上硬菜——精选20道高频练习题!从基础判断、选择,到代码阅读、实战编程,全方位帮你巩固知识点,避开高频坑!
毕竟学编程光听不练假把式,跟着这些题目过一遍,保证你对ArrayList、LinkedList的理解再上一个台阶~ 话不多说,开刷!
一、判断题:先踩稳基础坑
这部分全是入门高频考点,先自己做一遍,再看解析哦!答案已经标在题目后啦~
-
1. Vector集合类是线程不安全的。×
-
👉 解析:Vector是线程安全的!它的方法都加了synchronized锁,这也是它效率比ArrayList低、现在基本被淘汰的原因。
-
2. ArrayList集合是基于数组实现的。√
-
👉 解析:ArrayList的底层就是动态数组,能自动扩容,这也是它查询(get/set)快、增删慢的核心原因。
-
3. List集合中的数据元素是有序可重复的。√
-
👉 解析:这是List和Set最核心的区别!List保证“存取有序”(存的顺序和取的顺序一致),且元素可以重复;Set则是无序不可重复。
-
4. ArrayList集合属于Map集合。×
-
👉 解析:ArrayList继承自List,而List是Collection的子接口;Map是独立的双列集合体系(键值对存储),和Collection没有继承关系,完全是两个分支。
-
5. ArrayList集合的长度是不可变的。×
-
👉 解析:ArrayList是“动态数组”,长度可变!它会在元素存满时自动扩容(默认扩容为原来的1.5倍),解决了普通数组长度固定的痛点。
-
6. Vector之所以称为遗留集合类是因为它出现在Collection之前,在Collection出现之后进行了改造,实现了List接口,融入了Collection集合框架。√
-
👉 解析:Vector是Java早期的集合类,比Collection框架出现得早,后来为了兼容才实现了List接口,归入Collection体系,所以被称为“遗留类”。
-
7. Vector集合类是基于数组实现的、线程同步的集合类。√
-
👉 解析:Vector底层也是数组,核心特点就是线程同步(安全),但牺牲了效率,现在多用电竞CopyOnWriteArrayList替代。
二、选择题:吃透核心区别
选择题主要考察List子类的区别、方法使用,很多选项都是高频易错点,一定要仔细看解析!
1. 下面选项中哪些属于List集合?(ABD )
-
A. ArrayList集合 B. Vector集合 C. Set集合 D. LinkedList 集合
-
👉 解析:List的核心实现类就是ArrayList、Vector、LinkedList;Set是和List平级的接口,不属于List体系。
2. 下面关于ArrayList集合与LinkedList集合之间区别的描述中,正确的有( ABCD )
-
A. ArrayList是基于数组结构的集合
-
B. ArrayList遍历和随机访问元素的效率比较高
-
C. LinkedList采用链表存储方式
-
D. LinkedList插入,删除元素效率比较高
-
👉 解析:这是ArrayList和LinkedList的核心区别!数组结构支持随机访问(按下标找元素),所以查询快;链表结构通过指针连接,增删只需改指针,所以增删快。
3. 下面关于LinkedList集合的描述正确的有(ABCD )
-
A. 基于链表实现 B. 实现了List接口 C. 实现了Queue接口 D. 插入,删除元素效率比较高
-
👉 补充:LinkedList还实现了Deque接口(Queue的子接口),所以既能当List用,也能当队列、双端队列用,功能很灵活。
4. 下面对LinkedList集合的描述正确的有( ABCD )
-
A. 允许元素为null B. 通过索引访问 C. 元素可以重复 D. 基于链表实现
-
👉 易错点:很多人以为LinkedList不能通过索引访问!其实它实现了List接口,支持get(int index)方法,只是底层需要遍历链表,效率比ArrayList低,并非“不能访问”。
5. 在List集合中,如何获取第一个元素?(A)
-
A. get(0) B. getFirst() C. first() D. head()
-
👉 解析:List的通用方法是get(index),下标从0开始,所以第一个元素是get(0);getFirst()是LinkedList的特有方法,不是所有List都支持;C、D是不存在的方法。
三、代码阅读:看透集合操作的执行过程
给出一段ArrayList操作代码,先自己分析执行结果,再看解析,锻炼对集合增删改操作的理解!
👉 关键:add(int index, E element)是“插入”不是“替换”,会导致后续元素后移;而set(int index, E element)才是替换指定下标的元素,不改变集合长度。
四、编程题:实战演练,巩固核心方法
编程题是重点!每道题都给出“思路+代码+注释”,建议先自己写,再对比参考代码~
编程题1:ArrayList综合操作
需求:
-
正确定义集合类
-
生成20个100以内的随机数并加入集合
-
使用for循环遍历集合并输出
-
遍历ArrayList集合,计算所有偶数的和
-
将集合中所有大于等于80的数字的值替换为79
-
查找集合中是否存在数字25,输出提示
-
遍历集合,删除集合中所有小于10的数字

👉 易错点:删除元素时,正序遍历会导致下标偏移(删了i位置,i+1位置元素移到i,下一次循环i++会跳过),所以用倒序遍历或迭代器更安全。
编程题2:List元素查找与删除
需求:
-
创建集合并加入数据:“jack”,“rost”,“lisi”,“zhangsan”,“lisi”,“jetty”。
-
查找lisi第一次出现的下标,最后一次出现的下标。
-
删除集合中第一个和最后一个元素
👉 关键方法:indexOf(元素)返回第一次出现的下标,lastIndexOf(元素)返回最后一次出现的下标;删除最后一个元素时,用size()-1获取最后一个元素的下标。
编程题3:LinkedList综合操作(含异常处理)
需求:
-
键盘输入10个整数添加到LinkedList中,要求必须包含异常处理机制,确保程序在输入非法数据时不会崩溃。
-
计算并输出列表中所有元素的平均值。
-
找出并输出列表中的最大值和最小值。
-
将列表中的所有元素按升序排序并输出排序后的列表(推荐使用Collections工具类)

👉 重点:异常处理部分,用try-catch捕获输入非整数的异常,并用scanner.next()清空无效输入,避免程序进入死循环;Collections.sort()是工具类方法,可直接对List排序(默认升序)。
编程题4:ArrayList的所有遍历方式
需求:ArrayList中存储的元素是整型数字1~5,请使用所有方法遍历每个元素,将每个元素顺序输出
👉 常见遍历方式:普通for循环、增强for循环(foreach)、迭代器(Iterator)、列表迭代器(ListIterator)
总结
这20道练习题基本覆盖了List集合的核心知识点:子类区别、核心方法(add/remove/indexOf等)、遍历方式、异常处理、工具类使用等。
建议大家把编程题亲手敲一遍,尤其是“遍历删除”“异常处理”这些易错点,只有动手实践才能真正掌握~ 如果某道题有疑问,或者想练更多拓展题,评论区告诉我!
觉得有用的话,别忘了点赞+收藏,关注我后续更新Map集合的刷题篇哦!😘
更多推荐




所有评论(0)