ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java【集合】面试题

2020-09-29 17:03:01  阅读:273  来源: 互联网

标签:黑树 面试题 java HashMap 直接插入 链表 数组 集合 长度


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

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

二、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,然后进行取模计算。

标签:黑树,面试题,java,HashMap,直接插入,链表,数组,集合,长度
来源: https://www.cnblogs.com/qingmuchuanqi48/p/13750558.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有