当前位置 博文首页 > 文章内容

    java【集合】面试题

    作者: 栏目:未分类 时间:2020-09-29 17:01:19

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



    一、实例化数组后,能不能改变数组的长度?

    不能,数组一旦实例化,他们的长度就是固定的。

    二、List、Set、Map的区别?

    List中的元素:有序,可重复、可为空

    set中的元素:无序、不可重复,只有一个可以为空

    Map中的元素:无序、键不重复,值可以重复,可一个空键,一个空值。

    三、ArrayList和LinkedList有什么区别?

    ArrayList:

    • 底层是动态数组。
    • Arraylist的默认初始值大小为10,默认扩容大小为1.5倍。
    • 查询快,增删慢

    LinkedList:

    • 底层是双向链表。
    • LinkedList将元素添加到链表的末尾,无需扩容。
    • 增删快,查询慢。

    四、如何对list集合进行去重?

    1.借助于set集合

    2.利用list集合的container方法进行循环遍历

    五、数组和链表分别适用于什么场景,为什么?

    数组:查询多,增删少,数组的特性

    链表:查询少,增删多,链表的特性。

    六、HashMap的底层结构?

    HashMap的底层数据结构为数组+链表,在jdk1.8中当链表的长度超过8时,链表会转化为红黑树。

    七、HashMap如何存储数据?

    • 如果数组还没有初始化,就创建一个数组,默认长度时16.
    • 将hashmap中的key值取出来,转化成hash值,然后对数组的长度进行取余操作,然后放在数组对应的位置上。
    • 如果这个链表为空,直接插入。
    • 如果链表时红黑树,而且元素是红黑树,则直接插入到其中。
    • 如果是链表,则遍历链表,如果有相同的数值,则进行替换,否则直接插入到尾部。
    • 如果链表的长度大于等于8,则直接转换为红黑树。

    八、hashMap在1.7中和在1.8中的区别?

    • 在1.7的时候,没有红黑树,1.8中引入新特性当链表的长度大于8的时候,会转换成红黑树。
    • 在1.7的时候,插入元素,直接插入到头部,而在1.8的时候,是在尾部进行插入的。
    • 扩容的时候,在1.7的时候,容易出现死循环,而1.8中就不会出现死循环。

    九、HashMap和HashTable的区别?

    HashMap:

    • 非线程安全
    • 允许由null值
    • HashMap默认初始化数组的大小为16,扩容时乘以2,使用位运算取得hash
    • hash特性等原因,所以效率比HashTable高。

    HashTable:

    • 线程安全
    • 不允许由null值
    • hashTable默认初始值为11,扩容机制是乘以2+1,然后进行取模计算。