集合面试java
时间: 2025-03-11 19:15:02 浏览: 31
### Java 集合框架面试题及答案
#### Iterator 接口的作用是什么?
Java 迭代器(Iterator)是 Java 集合框架中的一种机制,是一种用于遍历集合(如列表、集合和映射等)的接口[^1]。通过 `Iterator` 可以安全地访问并移除集合中的元素而不会抛出并发修改异常。
```java
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String element = iterator.next();
System.out.println(element);
}
```
#### 如何解决哈希冲突?
当两个不同的键具有相同的哈希码时就会发生哈希冲突。为了处理这种情况,在存储这些键值对时会采用链地址法或者开放寻址法等方式来保存多个条目。对于 `HashMap` 来说,默认情况下使用的是链表结构;而在高负载因子下则转换成红黑树形式提高查找效率[^3]。
#### ArrayList 和 LinkedList 的主要差异有哪些?
- **内部实现方式不同**
- `ArrayList` 是基于数组实现的动态容量大小可变的线性表。
- `LinkedList` 则是以双向循环链表的形式存在,每个节点都包含前驱指针与后继指针以及数据域三部分组成。
- **随机访问性能对比**
- 对于 `ArrayList` 而言能够提供 O(1) 时间复杂度下的索引定位功能;
- 但是 `LinkedList` 在这方面表现较差因为每次都需要从头结点开始逐一遍历直到找到目标位置为止因此其时间开销较大约为O(n).
#### HashSet 中如何保证元素唯一性的?
由于 `HashSet` 底层依赖于 `HashMap` 实现, 所有存入其中的对象都会被当作 key 存储起来; 当向 set 添加新成员时先调用该对象所属类定义好的 hashCode 方法计算得到 hash 值作为桶编号进而确定具体存放的位置; 如果发现已有相同hash值得记录那么再进一步比较 equals 返回的结果决定是否允许加入还是覆盖原有项从而确保了整个容器里不存在任何重复项目.
#### ArrayList 和 Vector 的区别在哪里?
两者都是实现了 List 接口可以用来存储有序不唯一的组件序列. 不过它们之间存在着一些显著的区别:
- 同步特性方面:
- `Vector` 默认就是线程安全类型的即所有的增删改查方法都被 synchronized 关键字修饰过了;
- 相反 `ArrayList` 并不具备这样的性质所以在多线程环境下可能会遇到竞态条件等问题需要额外加锁保护共享资源.
- 性能考量上:
- 正是因为上述原因使得前者执行速度相对较慢特别是在频繁读写操作场景下更明显不过如果确实需要用到同步队列的话也可以考虑使用 Collections.synchronizedList 工具类来进行包装获得类似的效果而不必牺牲太多运行效能.
- 容量增长策略也有所差别:
- 每次扩容时 `Vector` 新分配的空间长度通常是当前数组的一半再加上旧有的全部内容形成新的更大的连续内存块;
- 而 `ArrayList` 则按照固定的比率增加默认为原来的百分之五十左右.
阅读全文
相关推荐















