HashMap 和 HashTable 的区别,谈谈ConcurrentHashMap的扩容机制,Jdk1.7和jdk1.8之间虚拟机发生了怎么样的变化,浅拷贝和深拷贝

HashMap 和 HashTable 的区别:

Hashmap 的源码部分:是没有加锁的所以它是线程不安全的

HashTable的底层是加了synchronized 同步锁的所以是线程安全的

hashMap 是允许key 和value为null 的,但是hashTable不允许

hashMap的底层是:数组+链表

先通过hash算法计算出key的值作为存储数组的下标,如果不同的key计算出同一个值的时候再通过equals方法判断是不是一个值,如果是的代替旧的value值存在数组中。如果不是同一个值的话则使用链表的存储方式外接在数组上。

key为null的时候,存在下标0的位置

hashTable虽然线程安全但是效率低现在多使用CurrentHashMap

谈谈ConcurrentHashMap的扩容机制

在jdk1.8之前

基于Segment分段实现的每个Segment相当于一个小型的HashMap,每个Segment内部会进行扩容,和hashMap的扩容类似

Jdk1.8以后

通过多线程一起扩容,每个线程负责一块区域,扩容前会通过这些线程进行元素转移

Jdk1.7和jdk1.8之间虚拟机发生了怎么样的变化

1.7中存在永久代,1.8中没有永久代替换成了元空间。不管是永久代还是元空间他们都是方法区的具体实现。之所以将元空间所占的内存移到虚拟机外面是因为:方法区中所存储的类信息是很难确定的,空间给小了容易造成内存溢出,太大了又会占用太多的虚拟机空间。转移到本地内存以后就不会影响倒虚拟机了。

浅拷贝和深拷贝

浅拷贝和深拷贝就是指的是对象的拷贝,一个对象中存在两种属性,一种是基本数据类型,一种是实例对象的引用

浅拷贝:对于基本数据类型的值进行复制,对于引用数据类型的值拷贝其地址,指向的还是同一个内存

深拷贝:对于基本数据类型的值进行复制,对于引用数据类型的值重新开辟出内存进行完全复制

泛型中Extends和super的区别

  1. <? extends T> 表示包括T在内的任何子类
  2. <? super T> 表示包括T在内的任何父类

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值