一、List系列集合
1.特点
2.特有方法
二、List集合的遍历
因为List集合有索引,所以可以用for循环遍历
这些功能 List的实现类(LinkList、ArrayList) 都可以使用。
三、ArrayList集合的底层原理
1.原理
2.适用场景
四、LinkList集合的底层原理
1.链表
2.链表特点
2.1添加数据
2.2注意:
特点1:用索引查询也要重头开始找
2.3删除数据
3.单链表和双链表
双链表的特点:
4.关于LinkLIst
5.LinkList的适用场景
1.用来设计队列
2. 用来设计栈
push()和pop()的源码
//push方法源码
public void push(E e){
addFist(e);
}
//pop方法源码
public E pop() {
return removeFirst();
}
五、Test系列集合
1.特点和特有方法
2. 举例
不可以 Set<Integer> set = new Set<>();因为Set是一个接口,不可以直接new对象,必须用它的实现类
六、HashSet集合的底层原理(基于哈希表实现的)
1.哈希值
1.1认识哈希值
哈希值:一个int类型的数值,在java中每个对象都有一个哈希值
所有对象都可以调用Object类提供的hashCode方法,返回自己的哈希值
1.2哈希值的特点
2.HashCode的底层原理
2.1哈希表
HashCode是基于哈希表实现的
哈希表是一种增删改查数据,性能都较好的数据结构
2.2原理
JDK8以前
横为数组,竖着的为链表
因此就可以解释为什么HashCode添加的元素无序、无索引、不重复以及增删改查数据快的原因了。(黑马基础140集)
问题:
扩容 16*0.75
JDK8以后
树也是一种数据结构,此处不过多说明(140集)
2.3深入了解HashSet集合去重复机制
如下:
七、LinkHashSet集合的底层原理
缺点: 但是每一个元素占内存较多
八.TreeSet集合的底层原理
九、总结
十、 集合的并发修改异常
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class CollectionTest1 {
public static void main(String[] args) {
// 掌握集合的并发修改异常
List<String> list = new ArrayList<>();
list.add("小王");
list.add("小李");
list.add("李哥");
list.add("小刘");
list.add("李明");
list.add("李鸿章");
//要求去除带李字的名字,并删除
//1.用for循环删除
// for (int i = 0; i < list.size(); i++) {
// String name = list.get(i);
// if (name.contains("李")) {
// list.remove(name);
// i--;//一定要加i--,否则会出现异常
//}
//}
//2.用迭代器
Iterator<String> it = list.iterator();
while(it.hasNext()) {
String name =it.next();
if (name.contains("李")) {
// list.remove(name);会发出并发修改异常错误
//所以用下面一行代码
it.remove();//删除迭代器当前遍历到的数据,每删除一个数据后,相当于在底层做了i--
}
}
System.out.println(list);
}
}