集合是存放对象的引用的容器
set list map
set list的父接口是Collection
list 有序可重复
set 无序
hashSet 基于hashMap来保存全部元素
hashSet的底层实现依靠equals()和hashcode()方法。避免重复的规则:
先判断新元素与集合内已经有的旧元素的HashCode值
如果不同,说明是不同元素,添加到集合。
如果相同,再判断equals比较结果。返回true则相同元素;返回false则不同元素,添加到集合。
通过地址值判断重复,如果想通过内容需要重写hashcode与equals方法
TreeSet 有序的集合
实现了Comparator接口 重写了compareTo(Object o)
可以自定义排序
List 重复 有序
ArrayList 长度可变的数组 数组 查询和赋值快
LinkedList 链表结构 双向链表 链表中删除增加比较快
map遍历
keyset+加强for循环
取出map的key值,遍历key值
反射
线程
新建
就绪
运行
阻塞
销毁
流
File流 IO流
字节流 InputStream OutputStream 读到末尾返回-1
字符流 Reader writer
字节流 字符流
字节流读取一个字节返回一个字节 字符流读取 读到多个字节 先去查指定的编码表,再将查到的字符返回
字节流可以处理所有类型的数据 字符流只能处理字符数据
字节流读到末尾返回-1 字符流返回null
有缓冲区的流一定要flush();
随机访问流 : RandomAccessFile
特点:将文件中的数据全部读取到流中,对流可以一直反复操作。
readLine() 按行读取
对象序列化反序列化
内存中的对象转化为字节序列 通过socket传输数据时需要将对象序列化
java8新特性
lambda表达式
函数式接口
方法引用
默认方法
Stream API
函数式接口
消费型接口 Consumer<T> void accept(T t);
供给型接口 Supplier<T> T get();
函数型接口 Function<T> R apply(T t);
断定型接口 Predicate<T> boolean test(T t);
比较器的自定义比较就是函数式接口的应用
方法引用:当要传递给Lambda体的操作,已经有了实现方法,可以使用方法引用。
构造器引用
静态方法引用
对象方法引用
实例方法引用
StreamAPI
Stream是用函数式编程在集合类上进行复杂操作的工具
stream特点:
不存储数据
不改变源数据
延迟执行特性
异常处理
ERROR 无法解决的异常
内存耗尽 无法加载某个Class 栈溢出
Exception 运行时异常
运行时异常
NullPointException
ClassCastException
ArrayIndexOutOfBoundsException
NumberFormatException
ArithmeticException
非运行时异常
区别:
java编译器要求方法必须声明并抛出可能发生的非运行时异常
断言 assert