首页 > 其他分享 >集合面试题

集合面试题

时间:2023-01-29 08:55:44浏览次数:42  
标签:面试题 HashMap HashSet 元素 接口 链表 集合

1.ArrayList和LinkedList的区别?

ArrayList查询速度快(不准确),尾部增删快,头部增删慢,随机访问速度快;LinkedList头尾增删速度快,中间不高,性能远比ArrayList差,不适合做查询;真想做查询用hashMap

(1)是否保证线程安全:ArrayList和LinkedList都不保证线程安全.

(2)底层数据结构:ArrayList底层使用的是数组,LinkedList底层使用的是双链表;

(3)插入和删除是否受元素位置影响:Arraylist采用数组储存,所以插入和删除元素的时间复杂度受元素位置的影响,Linked采用链表储存.所以插入,删除元素时间复杂度不受元素位置影响.

(4)是否支持快速随机访问:LinkedList不支持高效的随机元素访问,ArrayList实现了RandmoAccess接口,所以有随机访问功能.

(5)内存空间占用:ArrayList的空间浪费主要结尾会预留一定的容量空间,LinkedList的空间花费则体现在它每一个元素都需要消耗比ArrayList更多的空间.

2.HashMap底层原理

JDK8以前:数组+双链表;

JDK8以后:数组+双链表+红黑树;

3.HashMap的resize过程是什么样的?

采用hash表数据加链表的形式,1.8以后引入了红黑树的数据结构,初始化数组长度为16,当数组长度到0.75时扩容,链表长度大于8时转为红黑树,红黑树的长度小于6时转为链表结构,

数组中的元素容量超过了阙值的0.75就会触发扩容长度.

4.HashMap你经常用在哪个地方?

(1)电子商务的应用中使用HashMap作为缓存

(2)金融领域出于性能的考虑非常多的运用HashMap和ConcurrentHashMap

(3)controller层向前台返回数据可以用map封装数据

(4)mybatis中的map可以作为参数或者封装结果集

5.HashMap和Hashtable的区别?

(1)hashMap去掉了HashTable 的contains方法,但是加上了containsValue() 和containsKey()方法.

(2)hashTable同步的,而hashMap是非同步的,效率比hashTable要高.

(3)hashMap允许空键值,而hashTable不允许.

6.List,Map,Set三个接口,存取元素时,各有什么特点?

List有序可重复

Set无序不重复

Map一般都是键值对key-value值,value可多个值

7.HashSet是如何保证元素唯一性的呢?

通过元素的两个方法hashCode和equals来完成的

8.TreeSet怎么对集合中的元素进行排序?

TreeSet底层数据结构是二叉树

(1)让元素自身具备比较性,需要元素对象实现Comparable接口,覆盖compareTo方法

(2)让集合自身具备比较性,需要定义一个实现了Comparator接口的比较器,覆盖compare方法.

9.map集合的两种取出方式?

(1)通过map.keyset,先得到map集合的键,再根据键得到value值

(2)通过map.entrySet直接得到键值对

10.Collection和Conllections的区别?

Conllection是集合类的上级接口,继承他的接口主要有set和list

Conllections是工具类,有很多操作集合的方法.

11.ConcurrentHashMap 的工作原理及代码实现

ConcurrentHashMap引入了分割(Segment)的概念,只对Map的一部分(Segment)进行上锁,这样保证同步的时候,锁住的不是整个map

12.HashCode的方法和作用

hashCode()的作用是获取哈希码,也成为散列码,它实际上是返回一个int整数,这个哈希码的作用是确定该对象在哈希表中的索引位置

不同的对象可能会有相同的hashCode,在比较一个对象是否相等时,首先需要比较对象的hashCode是否相等,其次要比较equals是否相等

因此,equals方法被覆盖过,则hashCode方法也必须被覆盖hashCode()的默认行为是对堆上的对象产生的独特值,如果没有重写hashCode(),

则该class的两个对象无论如何都不会相等.

13.什么是链表?

链表是可以将物理地址上不连续的数据连接起来,通过指针来对物理地址进行操作,实现增删改查等功能.

链表大致分为单链表和双向链表

单链表:每个节点包含两部分,一部分存放数据变量的data,另一部分是指下一节点的next指针.

双向链表:除了包含单链表的部分还增加的pre前一个节点的指针.

14.链表的优缺点

链表的优点:插入删除速度快(因为有next指针指向其下一个节点,通过改变指针的指向可以方便的增加删除元素)

内存利用率高,不会浪费内存(可以使用内存中细小的不连续空间(大于node节点的大小)),并且在需要空间的时候才创建空间

大小没有固定,扩展很灵活.

链表的缺点:不能随机查找,必须从第一个开始遍历,查找效率低.

15.什么是红黑树

红黑树是一种含有红黑节点并能自平衡的二叉查找树,他必须满足下面性质:

(1)每个节点要么是黑色,要么是红色

(2)根节点是黑色

(3)每个叶子节点(NIL)是黑色

(4)每个红色节点的两个子节点一定都是黑色

(5)任意一节点到每个叶子节点的路径都包含数量相同的黑节点

16.常用的集合类有哪些?

Map接口和Collection接口是所有集合框架的父接口:

Collection接口的子接口包括:Set接口和List接口

Map接口的实现类有:HashMap,TreeMap,Hashtable,ConcurrentashMap以及Properties等

Set接口的实现类有:HashSet,TreeSet,LinkedHashSet等

List接口的实现类主要有:ArrayList,LinkendList,Stack以及Vector等

17.那些集合类是线程安全的?

Vector:就比ArrayList多了个synchronized(线程安全),因为效率较低,现在已经不太建议使用.

hashTable:就比hashMap多了个synchronized(线程安全),不建议使用

ConcurrentHashMap:是Java5中支持高并发,高吞吐量的线程安全HashMap实现,

18.遍历一个List有哪些不同的方式?

(1)for循环遍历,基于计算器,在集合外部维护一个计算器,然后依次读取每一个位置的元素,当读取到最后一个元素后停止

(2)迭代器遍历,Iterator,Iterator是面向对象的一个设计模式,目的是屏蔽不同数据集合的特点,统一遍历集合的接口,Java在Conllections中支持了Iterator模式.

(3)foreach循环遍历,foreach内部也是采用了Iterator的方式实现,使用时不需要显示声明Iterator或计数器,优点是代码简介,不易出错,缺点是只能做简单的遍历,

不能在遍历过程中操作数据集合,例如删除,替换.

19.如何实现数组和List之间的转换?

数组转List:使用Arrays,asList(array)进行转换

List转数组:使用List自带的toArray()方法

数组转set:使用构造函数,直接转入数组

new HashSet(arrays[])

20.如何把一个线程不安全的集合转化为线程安全集合?

向HashSet中add()元素时.判断元素是否存在的依据,不仅要比较hash值,同时还要结合equals方法比较,

HashSet中的add()方法会使用HashMap的put()方法.HashMap的key是唯一的,在HashMap中如果k/y相同时,会用新的V覆盖掉旧的V,然后返回旧的V,所以不会重复

21.说一下HashSet的实现原理?

HashSet是基于HashMap实现的,HashSet的值存放与HashMap的Key上,HashMap的Value统一为present,因此HashSet的实现比较简单

相关HashSet的操作,基本上都是直接调用底层HashMap的相关方法来完成,HashSet不允许重复的值,

22.HashSet如何检查重复?HashSet是如何保证数据不可重复的?

向HashSet中add()元素时,判断元素是否存在的依据,不仅要比较hash值,同时还要结合equles方法比较,

HashSet中的add()方法会使用HashMap的put()方法,

HashMap的key是唯一的在HashMap中如果k/v相同时,会用新的V覆盖掉旧的V,然后返回旧的V,所以不会重复

23.说一下HashMap的实现原理?

HashMap是基于哈希表的Map接口的非同步实现,此实现提供所有可选的映射操作,并允许使用null值和null键.

24.HashMap是如何解决Hash冲突?

核心就是使用了数组的储存方式,然后将冲突的key的对象放入链表中,一旦发现冲突就在链表中做进一步的对比,需要注意Jdk 1.8中

对HashMap的实现做了优化,

当链表中的节点数据超过了八个之后,该链表会转为红黑树来提高查询效率,数据长度低于6之后会退化为链表

25.为什么HashMap的初始长度为16?

因为长度太小很容易导致map扩容影响性能,如果分配太大的话又会浪费资源,所以就使用16作为初始大小

减少hash碰撞,提高map查询效率,分配过小防止频繁扩容,分配过大浪费资源,

26.HashMap和ConcurrentHashMap的区别?

ConcurrentHashMap对整个桶数组进行了分割分段(Segment),然后在每一个分段上都用了lock锁进行保护,

相对于HashTable的synchronized锁的粒度更精细了一些,并发性能更好,

而HashMap没有锁机制,不是线程安全的

HashMap的键值对允许有null,但是ConcureentHashMap都不允许.

27.什么是TreeMap?

TreeMap是一个有序的Key-value集合,他是通过红黑树实现的,

TreeMap基于红黑树(Red-Black tree)实现,该映射根据其键的自然顺序进行排序,

或者根据创建映射时提供的Comparator进行排序,具体取决于使用的构造方法,

28.comparable和comparator的区别?

comparable接口实际上是出自java,lang包,他有一个compareTo(Object obj) 方法用来排序

comparator接口实际上是出自java.util包,它有一个compare(Object obj1,Object obj2) 方法用来排序

29.如何实现对集合数据排序

使用Stream的sorted方法

使用Collections中的sort方法

使用有序的集合,例如:TreeSet,TreeMap

标签:面试题,HashMap,HashSet,元素,接口,链表,集合
From: https://www.cnblogs.com/carney/p/17071681.html

相关文章

  • io流面试题
    1.Io流系介绍四大家族(IuputStream,OutputStream,Reader,Writer)IuputStream与OutputStream是所有字节型输入流的祖宗类.Reader与Writer是所有字节型输入输出流的祖宗类......
  • 基础语法面试题
    1.String , StringBuilder,StringBuffer的区别?(1)String只读字符串,引用的字符内容是不能被改变的.(2)StringBuilder和StringBuffer表示的字符串对象可以直接......
  • 互联网大厂(字节、华为)Java EE面试题:Servlet/JSP 部分解析+答案,最强八股文
    文章目录​​1.请列举至少6种javaEE技术,并简述其作用。​​​​解析:​​​​参考答案:​​​​2.在web.xml文件中配置Servlet时,主要配置哪些信息?​​​​解析:​​​​参考答......
  • 算法面试题
    有一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数是多少,用递归算法实现。1intAdd(intnumber)2{3if(number<=0)4{5......
  • 【Java001】Map集合遍历
    【Java001】Map集合遍历大家好,我们的gzh是朝阳三只大明白,满满全是干货,分享近期的学习知识以及个人总结(包括读研和IT),跪求一波关注,希望和大家一起努力、进步!!方式1使用Map.Entr......
  • springboot前端传后端集合的一些问题
     前端不能加qs来处理集合对象,后端接收需要加@RequestBody  mybatis用foreach遍历集合对象:<updateid="updateBatch"parameterType="news">updatenew......
  • 读Java8函数式编程笔记03_高级集合类和收集器
    1. 方法引用1.1. 一种引用方法的轻量级语法1.1.1. 提供了一种简短的语法1.1.2. 标准语法为Classname::methodName1.2. 凡是使用Lambda表达式的地方,就可以使用1.......
  • Java集合
    一、什么是集合二、Collection体系集合1.Collection父接口2.List集合方法(list继承collection)publicstaticvoidmain(String[]args){//创建l......
  • .NET Core 面试题
    值类型和引用类型的区别?值类型继承System.ValueType,例如:int、bool、double等,string为特殊的引用类型赋值:值类型会产生一个新的数据副本,而引用类型是直接赋值引用。内存......
  • 前端面试题学习-个人总结
    前端面试题学习-HTML-个人总结这是看别人总结的基础上再度总结的,总结的链接如下链接1.DOCTYPE的作用?告知浏览器解析器用何标准解析文档,若不指定则按兼容模式进行解析......