Java集合面试

文章目录

Java集合框架

说说有哪些常见的集合?

集合相关类和接口都在Java.util中,主要分为3种:List(列表)、Map(映射)、Set(集)。

ArrayList和LinkedList的区别?

ArrayList基于动态数组实现,所以它的查找效率高,增删效率慢

LinkedList基于双向循环链表实现,它的查找效率低,增删效率快

List和Set的区别?

List:有序,按对象进入的顺序保存对象,可重复,允许多个null元素对象,可以使用迭代器去除所有元素,再逐一遍历,也可使用get(int index)获取指定下标的元素。

set:无序,不可重复,最多允许有一个null元素对象,取元素时只能通过iterator迭代器接口取得所有元素,再逐一遍历各个元素。

HashMap的数据结构?把你了解的所有都讲一讲?

数据结构:

1.7 数组+链表 1.8 采用数组+链表+红黑树

数组用来确定元素的位置;链表用来解决哈希冲突;红黑树提高查询效率

红黑树:

​ 根节点必须是黑色

​ 所有结点非黑即红

​ 红结点两个子结点一定是黑色

​ 任意结点到叶子结点,包含的黑色结点数目相同

put流程

​ 1.首先hash算法计算出哈希值

​ 2.判断数组是否需要扩容,是就执行resize方法扩容

​ 3.然后根据哈希值去数组寻找下标

​ 4.判断下标对应位置是否为空

​ 是的话就直接插入

​ 否的话就判断key是否相同

​ 相同的话直接覆盖

​ 不相同转到5

​ 5.判断是否为树节点(判断是否为红黑树)

​ 是的话在树中插入键值对

​ 否的话进行下一步

​ 6.遍历链表,判断key是否存在,

​ 存在的话就覆盖

​ 不存在的话插入链表尾部

​ 插入之后判断链表长度是否>8

​ 大于转为红黑树

​ 不大于就结束

​ 7.判断容量是否达到扩容阈值

​ 是就执行resize方法扩容

​ 否就结束

Hashmap的resize方法的执行过程?

两种情况会调用resize方法

1.第一次调用Hashma的put方法时,会调用resize方法对table数组进行初始化,如果不传入指定值,默认为16.

2.扩容时会调用resize方法,即size大于数组阈值threshold时,数组大小翻倍。

get流程

​ 1.根据哈希值到数组对应下标寻找元素

​ 判断是否是要查找的元素

​ 是就返回

​ 2.判断是否为树节点

​ 是就遍历红黑树查找

​ 3.判断是否为链表

​ 是就遍历链表查找

JDK8 HashMap为什么引入红黑树?解决了什么问题?

引入红黑树我认为是这样,当产生hash冲突时会形成链表,当数据多了冲突多了,链表会越来越长,造成链化,此时查询特别耗时间,本来时间复杂度为O(1)结构可能达到O(n),引入红黑树可以优化查询。

HashMap什么情况下会触发扩容呢?

当它未初始化,第一个put时会触发扩容。后面插入值,当大于扩容阈值时

HashMap与ConcurrentHashMap的区别是什么?

HashMap不是线程安全的,而ConcurrentHashMap是线程安全的.

ConcurrentHashMap采用锁分段技术,整个ConcurrentHashMap由一个个Segment组成,Segment通过继承ReentrantLock来进行加锁,所以每次需要加锁的操作锁住的是一个segment,这样只要保证每个Segment是线程安全的,也就实现了全局的线程安全。

HashMap和HashTable的区别?

HashMap线程不安全(效率高), 也可以使用Collections.synchronizedMap(hashMap)使其实现同步,Hashtable线程安全(效率比较低)

HashMap和HashTable的区别?

HashMap线程不安全(效率高), 也可以使用Collections.synchronizedMap(hashMap)使其实现同步,Hashtable线程安全(效率比较低)

HashMap的key和value都允许为null,而Hashtable的key和value都不允许为null,Hashtable遇到null,直接返回NullPointerException

HashCode和equals方法?

如果两个对象相等,则hashCode一定也是相同的

两个对象的hashcode值相同,它们不一定是相等的

equals方法被重写,则hashCode方法也必须被重写

相关推荐
Baihai_IDP1 分钟前
剖析大模型产生幻觉的三大根源
人工智能·面试·llm
Seven973 分钟前
线性数据结构
java
带刺的坐椅6 分钟前
Solon 不依赖 Java EE 是其最有价值的设计!
java·spring·web·solon·javaee
青云交10 分钟前
Java 大视界 -- 基于 Java 的大数据分布式存储在数字媒体内容存储与版权保护中的应用
java·性能优化·区块链·分布式存储·版权保护·数字媒体·ai 识别
Croa-vo14 分钟前
TikTok 数据工程师三轮 VO 超详细面经:技术深挖 + 建模推导 + 压力测试全记录
javascript·数据结构·经验分享·算法·面试
踢球的打工仔27 分钟前
PHP面向对象(5)
android·java·php
Rover.x29 分钟前
错误:找不到或无法加载主类 @C:\Users\AppData\Local\Temp\idea_arg_file223456232
java·ide·intellij-idea
4***172731 分钟前
使用 java -jar 命令启动 Spring Boot 应用时,指定特定的配置文件的几种实现方式
java·spring boot·jar
ChoSeitaku34 分钟前
线代强化NO19|矩阵的相似与相似对角化
python·线性代数·矩阵
sniper_fandc1 小时前
Coze智能体实现人生模拟器
python·ai·agent·coze