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

全部面试题

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

答:数组长度创建后固定,可以直接保存基本类型,也能保存对象引用;ArrayList 是可增长的引用列表,泛型参数不能直接写 int 等基本类型。数据量固定、处理基本数值或与要求数组的 API 交互时,数组很合适;需要频繁追加并使用列表接口时,ArrayList 更方便。

专注学习

答:并发集合为共享访问提供明确的同步与遍历语义,例如 ConcurrentHashMap 用于并发映射,CopyOnWriteArrayList 用于读多写少的快照遍历,ConcurrentLinkedQueue 用于非阻塞队列,BlockingQueue 增加等待能力。它们不是一种统一数据结构,也不是所有操作都没有锁。

专注学习

答:Vector 与 ArrayList 是数组列表,随机位置读取是 O(1),中间插删通常要移动引用;LinkedList 是双向链表,按位置读取最坏 O(n),已定位后的链接修改便宜。Vector 的常用方法同步,另两者没有内置同步。比较应先固定操作位置、定位方式与并发条件。

专注学习

答:要把“找到位置”和“修改结构”分开。ArrayList 找下标快,但中间插删要移动后续引用;LinkedList 改链接便宜,但用索引寻找中间节点通常要走链。只有已经通过迭代器定位等条件成立时,链表局部插删的优势才不会被定位成本掩盖。

专注学习

答:两者都保存键值映射,但迁移时要检查同步、null、遍历和复合操作语义。HashMap 无内置同步,允许 null 键和值;Hashtable 常用方法同步且拒绝 null。不能只替换构造器就认为行为等价,也不能假设某一种实现提供稳定的键迭代顺序。

专注学习

答:常见选择是 HashSet、LinkedHashSet、TreeSet:分别适合普通去重、保留相遇顺序、按比较规则排序和范围导航。还有适合枚举的 EnumSet,以及不同并发需求下的 CopyOnWriteArraySet、ConcurrentSkipListSet,或 ConcurrentHashMap.newKeySet。不存在满足所有要求的默认 Set。

专注学习

答:Hashtable 的常用读写方法同步在同一表对象上;ConcurrentHashMap 面向更高并发访问设计,读取通常不需锁住整个表,并提供单键原子更新方法。两者都拒绝 null。Java 21 的 ConcurrentHashMap 不是旧式固定 Segment 分段锁实现,具体路径要按版本解释。

专注学习

答:HashMap 保存键值对,用键找到对应值;HashSet 只表达某个元素是否存在,不提供独立业务值。HashSet 内部借用 HashMap,把元素放在键的位置,用统一占位值实现去重。因此二者共享哈希查找思路,但公开语义、方法参数和返回结果不同。

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