1. 说一说 Java 中的集合有哪些?
答:Java 中的集合主要有 List、Set、Map 三种类型,其中 List 表示有序的集合,Set 表示无序的集合,Map 表示键值对的集合。
2. ArrayList 和 LinkedList 的区别是什么?
答:ArrayList 是基于动态数组实现的,查找和修改元素速度快,但插入和删除元素效率较低;LinkedList 是基于链表实现的,插入和删除元素速度快,但查找和修改元素效率较低。
3. HashSet 和 TreeSet 的区别是什么?
答:HashSet 是基于哈希表实现的,不保证元素的顺序,不允许重复元素;TreeSet 是基于红黑树实现的,保证元素的排序,不允许重复元素。
4. HashMap 和 Hashtable 的区别是什么?
答:HashMap 是线程不安全的,性能较好;Hashtable 是线程安全的,性能相对较差。
5. 如何确保 HashMap 的线程安全?
答:可以使用 ConcurrentHashMap 来确保 HashMap 的线程安全。
6. 简述一下 ConcurrentHashMap 的实现原理?
答:ConcurrentHashMap 使用了分段锁技术,将哈希表分成多个段,每个段独立加锁,提高了并发性能。
7. 如何解决 HashMap 中的哈希冲突?
答:HashMap 采用链地址法来解决哈希冲突,当发生哈希冲突时,将新元素添加到链表的末尾。
8. ArrayList 的扩容机制是怎样的?
答:当 ArrayList 需要扩容时,会创建一个新的数组,长度为原数组的两倍,并将原数组中的元素复制到新数组中。
9.试述一下 Java 中集合的遍历方式有哪几种?
答:常见的集合遍历方式有 for-each 循环、Iterator 迭代器、List 接口的 listIterator 方法。
10. 讲一下 Collection 和 Collections 的区别?
答:Collection 是 Java 集合接口,定义了集合的基本操作;Collections 是一个工具类,提供了一些对集合进行操作的静态方法。