目录
Arraylist 和 LinkedList的区别
ArrayList 基于数组实现 查询效率高 查询快
Linkedlist 基于链表实现 增删快 查询效率低
Map集合
Map<k,v>集合遍历
Set集合
Set,List集合怎么删除元素
1.定义一个新的集合,把复合要求放入到新的集合,不符合要求的不放入,
2.,遍历的集合通过选代器中的remove方法进行删除
常见面试: 为啥下面的方式不能实现删除?会出现什么问题?
使用普通的 for
循环(可能导致索引问题)当我们删除一个他的下标就会消除一个 导致下边向前移动一位 这时候我们的个数也会随之减少 当我们的下标与个数对等时 就会导致循环结束 删除不完成
解决思路:
- 使用普通的
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集合