网站优化内容,网建短信通,wordpress首页显示,网站建设合同需要缴纳印花税文章目录 Java集合框架说说有哪些常见的集合#xff1f;ArrayList和LinkedList的区别#xff1f;List和Set的区别#xff1f;HashMap的数据结构#xff1f;把你了解的所有都讲一讲#xff1f;数据结构#xff1a; put流程Hashmap的resize方法的执行过程#xff1f;get流… 文章目录 Java集合框架说说有哪些常见的集合ArrayList和LinkedList的区别List和Set的区别HashMap的数据结构把你了解的所有都讲一讲数据结构 put流程Hashmap的resize方法的执行过程get流程JDK8 HashMap为什么引入红黑树解决了什么问题?HashMap什么情况下会触发扩容呢HashMap与ConcurrentHashMap的区别是什么HashMap和HashTable的区别HashMap和HashTable的区别HashCode和equals方法 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方法也必须被重写