Date类
Date(): 创建当前日期
Date(long): 根据指定时间戳创建日期对象 System.currentTimeMillis()
Date(int year,int month,int date): 指定年月日创建日期(year - 1900, month - 1, date)
getYear/Month/Date/Day: 获取年/月/日/星期/...
SimpleDateFormat
SimpleDateFormat(String 日期格式掩码):
y: 年
M: 月
d: 日
H: 时(24小时制)
m: 分
s: 秒
S: 毫秒
E: 星期
format(Date):String 将指定日期格式化为String
parse(String):Date 解析指定字符串为Date
applyPattern(String):void 重新应用样式掩码
JDK8 日期 API
LocalDateTime:
static now():LocalDateTime 创建当前的时间日期
static of(int year,int month,int date,int hour,int min):LocalDateTime 根据指定日期创建
static from(TemporalAccessor):LocalDateTime 将解析后的日期构建为LocalDateTime对象
getYear():int 获取年份
getMonthValue():int 获取月份
getDayOfMonth():int 获取日期
getDayOfWeek(): DayOfWeek 获取星期
toLocalDate():LocalDate 将LocalDateTime转换为LocalDate
withYear(int):LocalDateTime 调整年份,返回新的LocalDateTime对象
plusYear(int):LocalDateTime 加一年,返回新的LocalDateTime对象
minusYear(int):LocalDateTime 减一年,返回新的LocalDateTime对象
isAfter(LocalDateTime):boolean 判断是否在指定日期之后
isBefore(LocalDateTime):boolean 判断是否在指定日期之前
isLeapYear(LocalDateTime):boolean 判断闰年
until(LocalDateTime, ChronoUnit.DAYS):long 计算日期差值
日期格式化器:
DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss E");
format(LocalDateTime):String 格式化日期
parse(String):TemporalAccessor 解析日期返回TemporalAccessor
将TemporalAccessor转换为LocalDate或LocalDateTime需要调用LocalDateTime.from方法
public static TemporalAdjuster next(DayOfWeek dw):下一个周几
public static TemporalAdjuster nextOrSame(DayOfWeek dw):下一个周几(包括当天)
public static TemporalAdjuster previous(DayOfWeek dw):前一个周几
public static TemporalAdjuster previousOrSame(DayOfWeek dw):前一个周几(包括当天)
public static TemporalAdjuster firstDayOfMonth/lastDayOfMonth(): 当月的第一天/最后一天
public static TemporalAdjuster firstDayOfYear/lastDayOfYear(): 今年的第一天/最后一天
public static TemporalAdjuster firstInMonth/lastInMonth(DayOfWeek dw): 当月的第一个/最后一个星期几
public static TemporalAdjuster firstDayOfNextMonth/firstDayOfNextYear(): 下一月/下一年的第一天
程序 = 数据结构 + 算法
数组(Array):
优点: 遍历,随机访问
缺点: 插入,删除
栈(Stack):
先进后出(FILO)
队列(Queue):
先进先出(FIFO)
链表LinkedList:
优点: 遍历,插入,删除
缺点: 随机访问
树(tree)
红黑树:
优点:查询
缺点:遍历,添加,删除,随机访问
图(Map): key-value 键值对
哈希表(HashMap): 数组+链表
key: 不允许重复(根据hashCode值生成键)
value: 允许重复
获取长度
数组: .length属性
字符串: .length()方法
集合:.size()方法
Collection
add(Object):void 添加元素
remove(Object):boolean 根据对象删除元素,返回是否成功
clear():void 清空集合
size():int 返回集合长度
List:线性集合,有序(添加顺序)不唯一
get(int):Object 根据下标获取元素
remove(int):Object 根据下标删除并返回该元素
add(int,Object):void 将元素添加到指定下标
ArrayList implements List: 数组
初始容量0,第一次添加元素时(懒加载)创建长度为10的数组
扩容倍率为1.5倍
根据对象删除时底层调用equals比较
LinkedList implements List,Collection
栈:
push(Object):void 压栈
pop():Object 出栈
队列:
offer(Object):void 入队
poll():Object 出队
Set
HashSet:
特点与HashMap的key一致
TreeSet:
特点与TreeMap的key一致
Queue
Map: 键值对集合,键不重复,无序
HashMap
jdk8+: 尾插法
jdk7:头插法
初始长度: 16
扩容倍率: 2倍
加载因子: 0.75
扩容阈值: 长度 * 加载因子
树化条件(链表转为红黑树): 桶的深度 > 8 && 数组长度 >= 64
rehash
TreeMap
key必须实现Comparable接口,底层使用红黑树实现,判断重复key的标准不是equals而是compareTo是否返回0
迭代器:Iterator
所有的集合都能获取迭代器对象
1.获取迭代器 集合.iterator()
2.使用 while(迭代器.hasNext()) 判断是否有下一个元素
3.使用 迭代器.next() 取出下一个元素
删除遍历中的元素: 迭代器.remove()
增强for循环(foreach): 底层使用迭代器进行遍历
for(数据类型 变量名:集合|数组){
直接使用当前遍历的变量
}
快速失败(fail-fast): java.util包中的集合都是快速失败的, modCount
安全失败(fail-safe): java.util.concurrent包中的集合是安全失败, 能够在多线程环境下使用
泛型集合
集合类<包装类|类> 集合名 = new 集合类<>();
集合帮助类:
sort(List):void 排序(List中的元素必须实现Comparable接口)
sort(List, Comparator):void 按照指定排序规则进行排列
shuffle(List):void 乱序
Comparable: 用在实体类上,让该实体类具备比较的能力
int comparaTo(Object o);
Comparator: 用在sort方法中,第三方裁判
int compare(Object o1, Object o2)
int返回值表示:
0: 一样大
正数: 我(o1) > 你(o2)
负数: 我(o1) < 你(o2)
单例类:
1.私有构造
2.公开静态返回本类实例的方法
public static 当前类 createInstance(){
if(成员变量 == null){
成员变量 = new 当前类();
}
return 成员变量;
}