java基础自用笔记:异常、泛型、集合框架(List、Set、Map)、Stream流
异常
异常体系
编译时异常代表程序觉得你可能会出错。
运行时异常代表已经出错
异常基本处理
异常的作用
可以在可能出现的异常的地方用返回异常来代替return,这样提醒程序出现异常简洁清晰
自定义异常
最好用运行时异常,不会像编译时异常那样烦人,一碰就报红
自定义编译时异常
手动抛出异常
自定义运行时异常
自动帮你抛出异常
异常的处理方案
泛型
认识泛型
泛型类
泛型接口
泛型方法、通配符、上下限
泛型支持的类型
由于list.add(12)是基本数据类型,到了ArrayList的算法底层全都是用Object接收,Object接收的只能是对象,所以不能用ArrayList<int>,只能用int的包装类Integer,ArrayList<Integer>
在底层代码中,Integer的-128——127的数据已经包装好了,地址都是一样的,当超过这个范围就有不同的地址。Integer和int类型的数据可以自动互相转换。list.add(123)是int自动装箱Integer,list.get(1)是自动拆箱
Collection集合
集合体系结构
单列集合collection
collection的常用功能
collection的遍历方式
遍历方式的区别
两种解决方法
迭代器遍历适合没有索引的时候(for-each和Lambda遍历只适合遍历,不适合遍历且删除)
List集合
List集合的特有方法
ArrayList的底层原理
只有在第一次添加数据的时候才把数组扩容为10,后来的每次扩容都是原来长度的1.5倍
LinkedList的底层原理
Set集合
HashSet集合的底层原理
HashSet集合的元素去重操作
HashSet去重时,首先两个对象的hashcode值要一样,分到同一个位置后再根据两个对象的内容是否一样判断两个对象是否要去重。这时候可以在对象的类里面重写hashcode和equals方法,如果不重写这两个方法,两个对象的hashcode会不一样,也就没有判断内容一不一样的步骤了。
LinkedHashSet底层原理
每个元素记录前一个元素和后一个元素,首尾指针指向整个链表的第一个元素和最后一个元素