01单列结合顶层接口
1.Collection顶层接口图

2Collection的简单使用
public class ColletionDemo1 {
public static void main(String[] args) {
Collection<String> coll = new ArrayList<>();
//1.添加元素
//细节1:添加失败换返回false,成功true
coll.add("aaa");
coll.add("bbb");
coll.add("ccc");
// System.out.println(coll);
//2.从集合中移除元素
//coll.clear();
// System.out.println(coll);
//3.删除一个
//System.out.println(coll.remove("aaa"));
// System.out.println(coll);
System.out.println(coll.contains("ccc"));
}
}
当集合中里面使用自定义对象内容,实际需要需要比较对象内容的值时,需要重写equals方法,原因是Object的equals方法比较的是地址值而不是本身的内容。重写equals方法,在自定义的类中,右键->生成->含有equals的选项,next到底就可以了。这是一个比较的小细节,字符串acd和acD的hashCode值是一样的。
3.Collection与Collections的区别
前者是单列集合的顶层接口是接口,后者是工具类,它的addAll()方法一次性可以添加多个元素,使用便捷。
02集合的5遍历方法
1迭代器遍历:使用迭代器只能用于遍历不能用于其他的,又分为迭代器和集合迭代器,迭代器适合适合删除元素使用,集合迭代器适合添加元素使用,这里添加和删除使用的迭代器对象。
2.增强for循环遍历
3.forEach遍历
3.lambda表达式的forEach遍历
5.普通for循环遍历
public class ListDemo3 {
public static void main(String[] args) {
//1list集合的常见操作
List<String> list = new ArrayList<>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
// System.out.println(list);
//1.list集合中的五种遍历方式
//迭代器 适合遍历删除元素时,使用
Iterator<String> it = list.iterator();
while (it.hasNext()){
String str = it.next();
if ("bbb".equals(str)){
// it.remove();
list.remove("bbb");
}
//System.out.println(str);
}
System.out.println(list);
//2.集合迭代器 适合 遍历添加元素时使用
/* ListIterator<String> it2 = list.listIterator();
while (it2.hasNext()){
String str = it2.next();
if ("bbb".equals(str)){
//这个参加如期出现错误
//list.add("QQQ");
//后面这个添加还是有问题
it2.add("QQQ");
}
System.out.println(str);
}*/
/*现象:使用迭代器添加后的元素不能在迭代器遍历显示
* 在循环之外打印list会出现结果*/
// System.out.println(list);
//3.增强for循环
/* for(String l:list ){
System.out.println(l);
}*/
//4.lambda表达式的增强for循环
//foreach方法的底层其实就是一个循环遍历,一次得到集合中的每一个元素
//并把每一个元素传递给下面的accept方法。
/* list.forEach(new Consumer<String>() {
@Override
public void accept(String s) {
System.out.println(s);
}
});*/
//list.forEach(s -> System.out.println(s));
//5.普通for 结合索引
}
}
03常见的数据结构(栈、队列、数组、链表)
栈:先进先出FILO
队列:FIFO先进先出
链表:分为单链表和双链表,带头结点和不带头节点
04ArrayList源码分析
底层原理:数组+链表+红黑树(jdk1.8及以后),当数组长度大于64且链表挂载为8时,链表转变为红黑树。
创建时数组长度为空,添加数据时才开始扩容,添加第一个元素,开辟数据为10,当数据添加到第11时个,开始扩容,扩容5个或者添加集合的长度。
源码1:

方法newLength对minGrowth与preGrowth,进行了一次比较,这是因为add方法可以添加集合,当我们添加集合长度为1000时,不比较扩容5个是不合适的,因此要进行比较。
05LinkedList和迭代器源码分析
基本数据结构使用的双指针

指针变量意思的理解:
node和node.next都是一个指针,node指向当前节点,node.next指向节点的下一位
node=node.next就是指针后移一位。
06Iterator源码分析


880

被折叠的 条评论
为什么被折叠?



