Java 后端面试题库 / 全部题解免费阅读理解原理,有条理地回答

全部面试题

461 道题目
我的收藏与复习
题干与完整题解免费阅读第 13 / 47 页

答:HashMap 把键值对放进桶数组。写入或查询时,先根据键的哈希值定位桶,再在桶内比较键;键已经存在就替换值,否则新增映射。OpenJDK 21 的桶可以是链表或树,元素增多时可能扩容。它允许 null 键和值,不保证遍历顺序,也不保证线程安全。

专注学习

答:这里的“有序”按元素已经依比较规则排好来理解。无序数组通常需要逐个查找;有序数组能二分查找,但维持顺序时插入或删除往往要移动元素。选择时看查询与更新的比例、是否需要按顺序输出,以及数据量,不能只比较一次查找的复杂度。

专注学习

答:先按业务语义选接口,再按访问方式选实现:有位置用 List,去重用 Set,按键找值用 Map,排队用 Queue。声明泛型,明确顺序、null、可修改性与并发要求;数据量可估计时合理预分配。性能优化应有测量依据,避免只背“哪个类更快”。

专注学习

答:HashSet 按哈希与 equals 判重,不保证遍历顺序;TreeSet 按自然顺序或比较器排序,以比较结果为零判断是否已有元素。HashSet 的基本操作在哈希分布合适时通常接近 O(1),TreeSet 的 add、remove、contains 保证 O(log n)。选择还要看是否需要范围查询。

专注学习

答:Enumeration 是较早的遍历接口,提供 hasMoreElements 与 nextElement,不提供删除操作。Iterator 使用 hasNext、next,并定义可选的 remove 操作。现代集合通常用 Iterator;但是否允许删除、是否快速失败,都由具体容器和迭代器决定,不能只凭接口名判断。

专注学习

答:List 表达有位置、可重复的序列;Set 表达不重复的成员;Map 表达键与值的对应,一个键至多对应一个值;Queue 表达待处理元素及取出策略。Queue 不一定先进先出,例如优先队列按优先级取出。容器是否接受 null、是否可修改,要看具体实现。

专注学习

答:ArrayList 用可增长数组保存元素引用,按下标访问快,尾部追加的摊销成本低;LinkedList 用双向链表,按下标访问要沿节点寻找。链表已定位节点后的插删成本低,但按位置插删还要先定位。因此不能简单说“查询用数组,增删用链表”,普通列表通常先考虑 ArrayList。

专注学习
本页 10 道,共 461 道浏览其他领域