本文共 8936 字,大约阅读时间需要 29 分钟。
常用API
- Math 包含基本数学运算的方法,不能被实例化
- public staitc int abs(int a) 绝对值
- public static double ceil(double a) 向上取整
- public static double floor(double a) 向下取整
- public static int round(float a) 四舍五入
- public static int max(int a, int b) int最大值
- public static int min(int a, int b) int最小值
- public static double pow(double a, double b) a的b次幂
- public static double random() 返回double随机数[0.0, 1.0)
- System 不能被实例化
- public static void exit(int status) 中止当前运行的Java虚拟机,传入参数非零表示异常终止,零表示正常终止
- public static long currentTimeMillis() 返回当前时间的毫秒数
- public static void arraycopy(fromArr, fromStartIndex, toArr, toStartIndex, copyCount) 拷贝数组
- Object
- public String toString() 打印对象的哈希地址值
- public boolean equals(Obeject obj) 比较两个对象是否相等,默认比较的是地址
- Objects(JDK1.7提供) 不能被实例化
- public static String toString(一个具体的对象) 返回参数对象的字符串表示形式
- public static String toString(一个具体的对象,默认字符串) 同上,对象为null时打印默认字符串
- public static boolean isNull(一个具体的对象) 判断对象是否为空,null true
- public static boolean nonNull(一个具体的对象) 判断对象是否不为空,not null true
- BigDecimal
- 构造方法
- public BigDecimal(double val)
- public BigDecimal(String val)
- 常用方法
- public BigDecimal add(BigDecimal b) 加
- public BigDecimal subtract(BigDecimal b) 减
- public BigDecimal multiply(BigDecimal b) 乘
- public BigDecimal divide(BigDecimal b) 除 除不尽会出错
- public BigDecimal divide(BigDecimal b, 精确到小数点后几位, 取舍模式) 除 除不尽不会出错
- 包装类
- xxx.valueOf() 包装成对象
- xxx.parseXXX(String str) 解析字符串成基本数据类型
- Arrays
- public static String toString(Object[] a) 返回数组内容的字符串表示
- public static void sort(Object[] a) 按照数字顺序排序数组
- public static Object binarySearch(Object[] a, Object key) 利用二分查找,查找key,数组必须有序
- 日期时间类
- Date
- 构造方法
- public Date() 返回当前系统时间
- public Date(long time) 返回指定毫秒值确定的时间
- 常用方法
- public long getTime() 获取时间对象的毫秒值
- public void setTime(long time) 设置时间对象的毫秒值,修改时间
- SimpleDateFormat 对Date对象进行格式化和解析
- 构造方法
- public SimpleDateFormat() 使用默认格式生成一个格式化对象
- public SimpleDateFormat(String pattern) 使用指定格式生成一个格式化对象
- 常用方法
- public final String format(Date date) 将日期格式化成字符串
- public Date parse(String str) 将字符串解析成日期
- JDK8新增日期时间类
- LocalDateTime
- 创建方式
- public static LocalDateTime now() 获取当前系统时间
- public static LocalDateTime of(年, 月, 日, 时, 分, 秒) 返回指定日期时间的LocalDateTime对象
- 获取相关信息
- public int getYear() 获取年
- public int getMonthValue() 获取月份(1~12)
- public int getDayOfMonth() 获取月中的第几天(1~31)
- public int getDayOfYear() 获取年中的第几天(1~366)
- public DayOfWeek getDayOfWeek() 获取星期,DayOfWeek枚举类
- public int getMinute() 获取分钟
- public int getHour() 获取小时
- 转换为LocalDate,LocalTime
- public LocalDate toLocalDate() 转换为LocalDate
- public LocalTime toLocalTime() 转换为LocalTime
- 格式化和解析
- public String format(DateTimeFormatter pattern) 将日期格式化成字符串
- public LocalDateTime parse(String str, DateTimeFormatter pattern) 将字符串解析成日期
- DateTimeFormatter 指定对LocalDateTime对象进行格式化和解析的格式
- public static DateTimeFormatter ofPattern(String pattern) 使用指定格式生成一个格式化对象
- 修改日期时间
- public LocalDateTime plusXXXs(long time) 添加年月日时分秒,周。正加负减
- public LocalDateTime minusXXXs(long time) 减去年月日时分秒,周。正减负加
- public LocalDateTime withXXX(long time) 直接修改年月日时分秒,周
- Period
- public static Period between(LocalDate d1, LocalDate d2) 计算两个时间间隔(年月日和年月日,不包含时分秒)
- public int getYears() 获取这段时间过了几年
- public int getMonths() 获取两段时间月的差值,不是过去了多少个月
- public int getDays() 获取两段时间天的差值,不是过去了多少天
- public long toTotalMonths() 获取这段时间的总月数,过去了多少个月
- Duration
- public static DurationBetween(LocalDateTime t1, LocalDateTime t2) 计算两个时间间隔(年月日时分秒)
- public long toSeconds() 两个时间过了多少秒
- public int toMillis() 两个时间过了多少豪秒
- public int toNanos() 两个时间过了多少纳秒
异常
- 异常类结构
- Throwable
- Error 程序还未执行出现的错误,无法处理
- Exception 程序运行出现的异常,可以处理
- Throwable这个类用来表示任何可以作为异常被抛出的类
- try中出现的异常未处理(没有catch子句),在finally中抛出新的异常或者return,会导致异常丢失
- 异常处理与return语句
- 即使在try,catch里面return,也还是会执行finally,并且finally里面的return会改变返回值
- 抛出异常不能和return写在一个代码块之中
- throw 和 return 之后都不能继续执行了,所以这两个语句之后不允许写代码。除了finally可以继续执行
- throw 手动抛出一个异常,throws 方法可能抛出的异常
- throw一个编译异常,要么方法内部try…catch处理,要么throws抛出给调用者处理
- 断言assert关键字是从JAVA SE 1.4 引入的,为了避免和老版本的Java代码中使用了assert关键字导致错误,Java在执行的时候默认是不启动断言检查的(这个时候,所有的断言语句都将忽略!),如果要开启断言检查,则需要用开关-enableassertions或-ea来开启
- 要想打印跟踪栈的信息,e.toString()不行,参照如下代码:
public static String getTrace(Throwable t) { StringWriter stringWriter = new StringWriter(); PrintWriter writer = new PrintWriter(stringWriter); t.printStackTrace(writer); StringBuffer buffer = stringWriter.getBuffer(); return buffer.toString(); }
- System.out 和 System.err 区别
- 异常链
- 如果B异常的出现是因为A异常的出现而出现,那么他们就有一个链式关系A->B
- 处理异常的时候必定是
catch (AException e) { throw new BException();}// 这里的异常信息看不出来A和B有联系,而是会抛出两个异常
- 通过设置cause用来保存原始的异常信息
catch (AException Ae) { // 两种方式的前提是B异常必须拥有一个接受Throwable类型参数的构造方法 throw new BException(Ae); // 第二种方式 BException be = new BException(); be.initCayse(Ae);}
集合
- 集合类的体系结构
- Collection 单值
- List 可重复的单值
- Set 不可重复的单值
- Map 双值
- HashMap
- TreeMap
- Collection
- 常用方法
- boolean add(E e) 添加元素
- boolean remove(Object o) 从集合中移除指定元素
- boolean removeif(Predicate<? super String>) 根据条件移除指定元素,传入的参数时一个Lambda表达式的过滤器
- void clear() 清空元素
- boolean contains(Object o) 判断集合中是否包含指定元素
- boolean isEmpty() 判断集合是否为空
- int size() 获取集合的长度
- 用迭代器遍历集合
- Iterator iterator() 返回集合的迭代器
- boolean hasNext() 是否有下一个
- void next() 取出下一个并且向下移动迭代器指针
- void remove() 迭代器本身带的删除方法
- 增强For for( : ) JDK1.5出现
- List
- 特有方法
- void add(int index, E e) 在集合中的指定位置插入指定元素
- E remove(int index) 删除指定索引元素并返回该元素
- E set(int index, E e) 修改指定索引元素为指定元素,返回被修改的元素
- E get(int index) 获取指定索引元素
- ArrayList,LinkedList
- 特有方法,ArrayList特有方法基本没有,只列举LinkedList的
- void addFirst(E e) 在列表开头添加指定元素
- void addLast(E e) 在列表末尾添加指定元素
- E getFirst() 获取第一个元素
- E getLas() 获取最后一个元素
- E removeFirst() 移除第一个元素并返回
- removeLast() 移除最后一个元素并返回
- 泛型(JDK1.5引入)
- 用在类上 public class MyClass {}
- 用在方法上 public void show(T t) {}
- 用在接口上 public interface MyInterface {}
- <? extends E> 只能是E以及E的子类
- <? super E> 只能是E以及E的父类
- Set,TreeSet,HashSet
- TreeSet 存储元素有序,底层红黑树
- 自定义类使用TreeSet一定要自定义排序规则(实现Comparable接口)
- 或者在生成TreeSet对象的时候,用带比较器的构造方法
- HashSet 存储元素无序,底层哈希表
- 哈希值 是JDK根据对象的地址或者属性值,算出来的int类型的整数
- Object类中有一个方法可以获取对象的哈希值 int hashCode():根据对象的地址值算出来的哈希值
- 默认的hashCode方法是根据对象的地址值计算的,不同的对象hash值不一样
- 重写hashCode方法后,一般根据类的属性计算hash值,不同对象如果属性值一样,那么hash值就会一样
- 哈希表
- JDK8以前,底层采用数组 + 链表实现
- JDK8以后,底层采用数字 + 链表 + 红黑树实现
- HashSet JDK8以前原理
- 底层(数组 + 链表)
- 数组的长度默认是16,加载因子是0.75
- 底层会获得元素的哈希值,计算出在数组中应存入的索引位置
- 添加元素时,同一数组位置,且新旧值不一样,就会在该数组位置形成一个链表结构
- HashSet JDK8以后原理(同一位置元素过多,比较次数多)
- 在之前的基础上,如果链表长度大于8,这个链表就会变成红黑树进行存储
- 二叉树
- 一个节点最多只能有两个子节点
- 二叉查找树:任意一个节点的左子节点都小于自己,右子节点都大于自己
- 平衡二叉树
- 二叉树左右两个子树的高度差不超过1
- 任意节点的左右子树都是一颗平衡二叉树
- 平衡二叉树的旋转,当添加一个节点后,该树不再是一颗平衡二叉树的时候,就会触发旋转
- 左旋 将根节点的右侧往左拉,原先的右子节点变成新的根节点,并把这个右子节点的左子节点给到降级的根节点当右子节点
- 右旋 将根节点的左侧往右拉,原先的左子节点变成新的根节点,并把这个左子节点的右子节点给到降级的根节点当左子节点
- 红黑树(平衡二叉B树)
- 规则
- 它是一种特殊的二叉查找树,每一个节点都有红或黑一种颜色
- 它不是高度平衡的,它的平衡是通过“红黑规则”实现的
- 根节点必须是黑色的
- 如果一个节点没有子节点或者父节点,则该节点乡音的指针属性值为Nil,这些Nil是为叶节点,每个叶节点都是黑色的
- 如果某一个节点是红色的,那么它的子节点必须是黑色
- 对每一个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数目的黑色节点
- 添加节点
- 默认为红色的效率最高
- Map
- 常用方法
- V put(K key, V value) 添加元素
- V remove(Obeject key) 删除元素
- void clear() 清空集合
- boolean containsKey(Obeject key) 是否包含指定Key
- boolean containsValue(Object value) 是否包含指定值
- boolean isEmpty() 判断集合是否为空
- int size() 获取集合长度
- 遍历方式
- Set<K> keySet() 获取所有键的集合
- V get(Object key) 根据键获取值
- Set<Map.Entry<K, V>> entrySet() 获取所有键值对对象集合
- K getKey() 获得键 这个方法是Entry类的方法
- V getValue() 获得值 这个方法是Entry类的方法
- HashMap 底层是哈希表
- TreeMap 底层是红黑树
- 不可变集合
- List,Set,Map都有一个静态的of方法用来创建一个不可改变的集合对象
- 内容不可变,长度不可变
- static<E> List<E> of(E…elements)
- static<E> Set<E> of(E…elements)
- static<K, V> Map<K, V> of(E…elements)
Stream流(JDK8) 像流水线一样操作数据,不会改变数据源
- 应用场景
- 三类方法
- 获取Stream流 创建一条流水线,并把数据放到流水线上准备进行操作
- 单列集合 使用Collection接口中的默认方法stream()生成流 default Stream<E> stream()
- 双列集合 间接获取 先通过keySet或者entrySet获取一个Set集合 再通过这个单列集合获取Stream流
- 数组 使用Arrays中的静态方法stream生成流
- 同种数据类型的多个数据 型如"1,2,3,4…" 使用Stream.of(T…values) 生成流
- 中间方法 流水线上对数据的操作方法
- Stream<T> filter(Predicate predicate)
- 对流中的数据进行过滤
- Predicate接口中只有一个抽象方法booelan test() 该方法用于指定留下的元素的规则
- Stream<T> limit(long maxSize) 截取指定参数个数的数据,保留前maxSize个数据
- Stream<T> skip(long n) 跳过指定参数个数的数据,前n个数据不要
- static <T> Stream<T> concat(Stream a, Stream b) 合并a,b两个流
- Stream<T> distinct() 去除流中重复的元素,依赖(hashCode和equals方法)
- 终结方法 流水线上的最后一个操作
- void forEach(Consumer action) 对流的每个元素执行操作
- Consumer接口中的方法,void accept(T t) 对给定的参数执行此操作
- void count() 返回流中的元素个数
- Stream流的收集操作,把流中的数据保存起来
- R Collect(Collector collector)
- 只是收集流中的数据,这个方法不会创建容器,更不会往容器中添加元素
- 方法的参数如下,会创建集合容器,并添加元素,之后这个方法就可以返回新的集合了
- 工具类Collectors提供了具体的收集方式
- static <T> Collector toList() 把元素收集到List集合中
- static <T> Collector toSet() 把元素收集到Set集合中
- static Collector toMap(Function keyMapper, Function valueMapper) 把元素收集到Map集合中
转载地址:http://eikmf.baihongyu.com/