常见集合 跟ClassLoaber类加载器 以及一些面试题

目录

Map集合

 Map集合遍历,v>

 Set集合

 Set,List集合怎么删除元素

HashMap源码分析

  3.hashmap底层原理

ClassLoader类的加载器

 JVM加载器分为三个部分

 双亲委派模型

 常见的集中集合引展:

Collection::

set集合::

 List集合


Arraylist 和 LinkedList的区别

ArrayList 基于数组实现  查询效率高 查询快

Linkedlist 基于链表实现  增删快 查询效率低

Map集合

 Map<k,v>集合遍历

 Set集合

 Set,List集合怎么删除元素

1.定义一个新的集合,把复合要求放入到新的集合,不符合要求的不放入,
2.,遍历的集合通过选代器中的remove方法进行删除
常见面试: 为啥下面的方式不能实现删除?会出现什么问题?

 

 使用普通的 for 循环(可能导致索引问题)当我们删除一个他的下标就会消除一个 导致下边向前移动一位 这时候我们的个数也会随之减少 当我们的下标与个数对等时  就会导致循环结束  删除不完成

解决思路:

  1. 使用普通的 for 循环,从后向前遍历
    • 从后往前遍历列表,可以避免索引问题,因为移除操作不会影响未遍历部分的索引
  • 使用迭代器
    • 使用 Iterator 提供的 remove 方法来安全地移除元素,这是推荐的方式。

HashMap源码分析

底层:数组+链表+红黑树

1,默认构造函数内:初始化了加载因子是默认 | 缺省值为0.75

2.对key进行hash运算

 h=获取key的hashcode  然后对这个值进行右移动16位  h>>16

  3.hashmap底层原理


 数组: 下标怎么计算的:hash &(n-1)n hash的容器大小
 hashMap容量默认大小16
 加载因子:0.75
 满足什么条件进行扩容   :resize()size>threshold=16*0.75

1:当容量大于容量*加载因子的时候 进行扩容
2.在转换成红黑树的时候扩容:tab==null||tab.length<64 进行扩容
 扩容的方式:newcap=oldcap<<1

ClassLoader类的加载器

.java源文件-->javac  -->.calss文件  -->Classoader -->JVM中

 类的加载器  是JVM中的一部分 负责把class字节码加载到JVM内存中

 

 JVM加载器分为三个部分


1.系统|启动类|根|的加载器Bootstrap ClassLoader 它负责加载系统的lib文件
2.扩展类的加载器Extenslon ClassLoader 他负责加载ext的文件
3.应用程序类加载器Application ClassLoader 它负责加载本地lib文件

 

 双亲委派模型

当一个类加载器收到加载的请求时,他会先派给父类的加载器进行加载,如果没有就会继续向上传递,如果到达顶层还没有加载过,那就会自己加载, 如果没有加载到就会爆:ClassNoFoundExeption的异常

 常见的集中集合引展:

Collection::

set集合::

 

 List集合

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值