hello uu们 感谢收看!!!!我最近听了一首歌《21》,真的很感慨,马上步入20的我也感觉时间真的飞快...望大家都能过上理想的生活,不负内心的所托...现在口语化更新答案,让大家更加模拟的与面试官沟通.
正如人民日报所言,“请你努力,为了自己。”
二、容器
- Java容器都有哪些?
- 在Java中,我们主要有两大类容器。第一类是集合类(Collection),比如我们常用的
List
,像ArrayList
和LinkedList
,还有Set
,例如HashSet
和TreeSet
。第二类是映射类(Map),它用来存储键值对,比如HashMap
和TreeMap
。
- Collection 和 Collections 有什么区别?
- 这个问题很常见,
Collection
是一个接口,它代表了一组对象的集合,比如List
或Set
。而Collections
是一个工具类,提供了一系列静态方法来操作这些集合,比如排序和搜索等。
- List、Set、Map 之间的区别是什么?
- 简单来说,
List
是有序的,可以包含重复元素,像一列学生的名字。Set
是不允许重复的,保持唯一性,就像一个班级里每个学生只能有一个学号。至于Map
,更多的是存储键值对的,比如电话簿,键是名字,值是电话号码。
- HashMap 和 Hashtable 有什么区别?
- HashMap是非线程安全的,性能更好,而Hashtable是线程安全的,但因此性能会有些下降。此外,HashMap允许一个null键和多个null值,而Hashtable不允许任何null键和null值。
- 如何决定使用 HashMap 还是 TreeMap?
- 如果你需要快速的插入和查找,且不关心顺序,HashMap是个不错的选择。但如果需要根据键的自然顺序或者自定义顺序来排序,那就用TreeMap。
- 说一下 HashMap 的实现原理?
- HashMap通过使用哈希表来存储数据。当你存储一个键值对时,它会根据键的哈希值来计算索引位置。若发生碰撞(多个键产生相同的索引),HashMap会通过链表(在Java 8之后,可能变为红黑树)来处理这些冲突。
- 说一下 HashSet 的实现原理?
- HashSet底层其实是基于HashMap实现的。每一个HashSet中的元素都是HashMap的一个键,HashMap里的值一般是一个常量。它利用HashMap的特性来确保元素的唯一性。
- ArrayList 和 LinkedList 的区别是什么?
- ArrayList使用动态数组作为底层实现,随机访问的时候性能很好。而LinkedList则使用链表,适合频繁的插入和删除操作。简单来说,如果你需要经常修改列表,LinkedList可能更好;如果你需要快速访问某个元素,ArrayList更为合适。
- 如何实现数组和 List 之间的转换?
- 从数组转为List很简单,你可以使用
Arrays.asList(array)
。而从List转为数组则可以用list.toArray(new String[0])
来实现。
- ArrayList 和 Vector 的区别是什么?
- Vector是线程安全的,所有方法都被锁住,因此在多线程环境下是安全的,但在单线程中,性能上可能不如ArrayList。ArrayList是非线程安全的,速度更快,适合单线程环境。
- Array 和 ArrayList 有何区别?
- 数组的大小是固定的,而ArrayList是可变的,可以根据需要增减大小。数组还能存储基本数据类型,但是ArrayList只能存对象类型。
- 在 Queue 中 poll()和 remove()有什么区别?
poll()
方法在队列为空时返回null,而remove()
会抛出异常,二者都是用来获取并移除队列头的元素。也就是说,poll更安全一些。
- 哪些集合类是线程安全的?
- 常见的线程安全集合类包括
Vector
、Hashtable
、ConcurrentHashMap
等,还有一些像CopyOnWriteArrayList
和各种实现的BlockingQueue
也都是线程安全的。
- 迭代器 Iterator 是什么?
- Iterator是遍历集合的工具,可以让你按顺序访问集合里的每一个元素,而不用考虑集合的内部细节。这种设计使得我们能够安全地遍历集合。
- Iterator 怎么使用?有什么特点?
- 使用Iterator很简单,首先通过
collection.iterator()
获取迭代器,然后用hasNext()
和next()
方法顺序访问元素。特点是它支持在遍历期间安全地删除元素,使用remove()
方法。
- Iterator 和 ListIterator 有什么区别?
- Iterator可用于所有类型的集合,但只能单向遍历;而ListIterator专门用于List,支持双向遍历,可以让你在列表中前后移动。
- 怎么确保一个集合不能被修改?
- 你可以使用
Collections.unmodifiableCollection(collection)
方法,这样返回的集合就不能被修改,任何修改操作都会抛出异常。