1.Java的HashMap是如何工作的?
HashMap是数据结构的键值,每个键都有相应的值。 重要的是识别那样的值。
HashMap基于hashing原理,使用put (和get )方法存储和检索对象。 如果将键-值对传递给put (方法),则调用键对象的hashCode ()方法来计算hashCode,并找到bucket存储值对象的位置。 检索对象后,使用键对象的equals ()方法找到正确的键值对并返回值对象。 HashMap使用链接列表解决碰撞问题,发生碰撞时,对象存储在链接列表的下一个节点中。 HashMap在每个链接的列表节点中存储键值对对象。
2 .什么是快速失败的故障安全迭代器?
在ConcurrentModifcationException基础集合的迭代期间,可能会修复快速失败的Java迭代器。 崩溃安全性不会作为实例的复制迭代抛出异常。 快速失败的故障安全示例定义了系统在出现故障时的反应。 例如,失败的高速迭代器ArrayList和故障安全迭代器ConcurrentHashMap。
3 .什么是3.JavaBlockingQueue?
JavaBlockingQueue是并发集合util包的一部分。 BlockingQueue队列是一种支持操作,用于等待元素可用后检索元素,等待空间可用后存储元素。
什么时候使用ConcurrentHashMap?
在q2中,ConcurrentHashMap用作故障安全迭代器的实例,可以完全同时获取和更新。 如果有大量并发更新,则ConcurrentHashMap此时可用。 这与Hashtable很相似,但ConcurrentHashMap在这方面似乎性能更好,因为ConcurrentHashMap不会锁定整个表以提供并发。 因此,如果有大量更新,应该使用ConcurrentHashMap。
5 .实现了最快插入的List是哪个?
链接列表和ArrayList是单独的变量列表实现。 ArrayList的优点在于动态增长数组,非常适合初始总长未知的情况。 “LinkedList”的优点是在中间位置插入和删除操作速度最快。
LinkedList实现列表接口并允许空元素。 此外,链接列表还在链接列表的开头或结尾提供其他get、remove和insert方法。 通过这些操作,链接的列表可以用作堆栈、队列或双向队列。
ArrayList实现了可变大小的数组。 允许所有元素,包括空值。 每个ArrayList实例都有一个“容量”(Capacity ),它是用于存储元素的数组的大小。 添加新元素时,此容量会自动增加,但没有定义增长算法。 如果需要插入大量元素,可以在插入之前调用ensureCapacity方法来增加ArrayList的容量以提高插入效率。
6 .迭代器和列表迭代器的区别
ListIterator具有向List中添加对象的add ()方法,但不能是Iterator。
ListIterator和Iterator有hasNext (和next )方法,可以正向遍历,而ListIterator有hasPrevious ()和previous () )方法,可以反向遍历不能迭代器。
ListIterator可以确定当前索引位置,nextIndex (和previousIndex ) )可以实现。 迭代器没有此功能。
可以删除对象,但ListIterator允许修改对象,而set ()方法允许修改对象。 Iierator只能遍历,不能修改。
什么是版权保护列表? 那和ArrayList有什么不同?
CopyOnWriteArrayList是ArrayList的线程安全变体,所有可变操作(添加、集等)都是通过复制新的基础数组实现的。 由于需要实例的快照,因此写入速度比ArrayList慢。
虽然CopyOnWriteArrayList需要在写入操作中以大面积复制数组,所以性能一定很差,但由于读取操作与操作的对象不是同一个对象,因此需要在读取和写入之间进行锁定读和写之间的同步过程只是在写后用简单的“=”将引用指向新的数组对象,这很少花费时间,因此读操作很快就变得安全,适合多线程使用。 CopyOnWriteArrayList适合在读操作比写操作大得多的场景中使用,如缓存。
8 .迭代器和枚举的区别
如果面试官问这个问题,他的意图一定是区分迭代器和枚举两个方面:
在迭代器中,可以从基础集合中删除元素。
迭代器的方法名称是标准化的。
9.Hashmap如何同步?
如果需要同步的HashMap,则有两种选择。
使用Collections.synchronizedMap .同步HashMap。
使用了ConcurrentHashMap
由于不需要锁定整个对象或在ConcurrentHashMap分区地图中获取锁定,因此建议在这两个选项之间使用ConcurrentHashMap。
10.IdentityHashMap和HashMap的区别
IdentityHashMap是Map接口的实现。 与HashMap不同,这里采用参考平等。
在HashMap中,如果两个元素相等,则为key1.equals(key2) )。
在IdentityHashMap中,如果两个元素相等,则key1==key2