面试公司:今日头条,阿里巴巴,远景能源,腾讯,天数,上海星环科技。
-
一、Java基础
-
ArrayList和LinkedList的区别?(链表和数组的优缺点)
答:ArrayList是一个动态的数组结构,而LinkedList是双向链表结构;存取数据的时候,ArrayList更适合按位随机存取,而LinkedList更适合顺序读存取;插入/删除数据时,ArrayList的开销就比LinkedList更大,因为对于ArrayList,插入/删除一个数据时需要移动其后所有数据,而LinkedList只需要修改几个指针即可。 -
HashMap是怎样的结构?工作原理是什么?退化成链表解决方法?
答:HashMap的本质仍然是数组,不过数组中存储的不是数据,而是一个链表的头节点。所以准确的说,其实现就是链表数组。HashMap中保存的是一个键值对,插入对象时必须提供一个键对象;查找对象时必须给定一个键对象(因此必须记住键)。键对象时不允许重复的,但是允许null空键的存在。
HashMap插入对象时,根据给定的键key计算hashcode,然后再与数组长度进行求余运算得到数组下标。然后与该位置上的链表中已存储的键进行比较,对于已存在的键,则覆盖;对于不存在的键,则添加到链表尾。
HashMap工作原理:
-