JDK8版本的时间操作
LocalDateTime/LocalDate/LocalTime
LocalDateTime/LocalDate/LocalTime : JDK8开始有的时间操作类 -> 年与日时分秒/年月日/时分秒
LocalDateTime/LocalDate/LocalTime 都解决了JDK8之间时间类的文化差异!
LocalDateTime是一个不可变的日期时间对象,代表日期时间,通常被视为年 - 月 - 日 - 时 - 分 - 秒。
时间表示为纳秒精度;
如何创建LocalDateTime/LocalDate/LocalTime对象
static LocalDateTime now() : 现在系统时间
static LocalDateTime of(int year, int month, int dayOfMonth, int hour, int minute, int second) : 创建一个指定日期时间的LocalDateTime对象
static LocalDateTime of(LocalDate date, LocalTime time) : 说明LocalDateTime是由LocalDate和LocalTime组成
DateTimeFormater
DateTimeFormater : 是JDK8版本日期格式的类(SimpleDateFormat平替类)
DateTimeFormater的对象只用于提供日期格式!!解析和格式化的方法由时间对象提供!!
----------------------------回顾-------------------------------------
SimpleDateFormat 的使用步骤: 既要提供日期格式代码,又要提供解析和格式化的方法
SimpleDateFormat sdf = new SimpleDateFormat("日期格式代码");
SimpleDateFormat的类中:
格式化 : String format(Date date)
解析 : Date parse(String strTime)
-----------------------------------------------------------------
DateTimeFormater 的使用步骤 : 很专注,只提供日期格式!!解析和格式化的方法由时间对象提供!!
static DateTimeFormatter ofPattern(String pattern)
LocalDateTime类中提供格式化和解析的方法
格式化: String format(DateTimeFormatter formatter)
解析: static LocalDateTime parse(CharSequence text, DateTimeFormatter formatter)
CharSequence text: 字符串类型的时间
LocalDateTime中的until方法(LocalDateTime中的时间间隔方法)
long until(Temporal endExclusive, TemporalUnit unit)
Temporal : 接口 -> LocalDateTime/LocalDate/LocalTime
Temporal endExclusive: 时间结束点
//启动 : 起始时间LocalDateTime对象.until(结束时间点LocalDateTime对象,????)
TemporalUnit unit: 时间单位
TemporalUnit 接口 : 接口的实现类 ChronoUnit(枚举类) 时间单位是固定数量的
LocalDateTime的get系列方法(获取值)
int getYear() :获取年信息
int getMonthValue() :获取月份信息(1-12)
int getDayOfMonth(): 获取天信息
int getHour() :获取小时信息
int getMinute():获取分钟信息
int getSecond(): 获取秒钟信息
-------------------------------------------
DayOfWeek getDayOfWeek():获取星期信息
int getDayOfYear():获取年中天信息
Month getMonth(): 获取月份信息(枚举对象返回)
int getNano():获取纳秒信息
LocalDateTime的plus系列方法(加)
plus系列方法是对日期字段进行做加法的操作!
LocalDateTime plusYears(long years)
LocalDateTime plusMonths(long months)
LocalDateTime plusDays(long days)
LocalDateTime plusHours(long hours)
LocalDateTime plusMinutes(long minutes)
LocalDateTime plusSeconds(long seconds)
-------------------------------------------------
LocalDateTime plusNanos(long nanos)
LocalDateTime plusWeeks(long weeks)
注意:
1. 记得接收, 因为时间修改是生成新的LocalDateTime对象,老的LocalDateTime对象不会改变
2. 如果你传入的是正数就是做加法,如果你传入的是负数就是做减法
LocalDateTime的minus系列方法(减)
minus系列方法是对日期字段进行做减法的操作!
LocalDateTime minusYears(long years)
LocalDateTime minusMonths(long months)
LocalDateTime minusDays(long days)
LocalDateTime minusHours(long hours)
LocalDateTime minusMinutes(long minutes)
LocalDateTime minusSeconds(long seconds)
-------------------------------------------------
LocalDateTime minusNanos(long nanos)
LocalDateTime minusWeeks(long weeks)
注意:
1. 记得接收, 因为时间修改是生成新的LocalDateTime对象,老的LocalDateTime对象不会改变
2. 如果你传入的是正数就是做减法,如果你传入的是负数就是做加法
LocalDateTime的with系列方法(设置值)
with系列方法是对日期字段进行设置值的操作!
LocalDateTime withYears(long years)
LocalDateTime withMonths(long months)
LocalDateTime withDays(long days)
LocalDateTime withHours(long hours)
LocalDateTime withMinutes(long minutes)
LocalDateTime withSeconds(long seconds)
-------------------------------------------------
LocalDateTime withNanos(long nanos)
LocalDateTime withWeeks(long weeks)
注意:
1. 记得接收, 因为时间修改是生成新的LocalDateTime对象,老的LocalDateTime对象不会改变
Period
Period : 时间间隔类 -> 年月日的时间间隔
对象的创建:
static Period between(LocalDate startDateInclusive, LocalDate endDateExclusive)
Duration
Duration: 时间间隔类 -> (年月日)时分秒的时间间隔
对象创建:
static Duration between(Temporal startInclusive, Temporal endExclusive)
Temporal: 父接口 -> LocalDateTime/LocalDate/LocalTime //但是不可以传LocalDate对象
long toDays() : 获取时间间隔对象之间间隔的天数 -> to系列
集合体系概述
集合 : 数据的合集 -> 容器 //取代了数组
集合的特点:
1. 长度可变 -> 取代数组的原因 好处
2. 集合中的元素数据类型只能是引用数据类型(对象) -> 弊端(弊端被解决了)
3. 集合的底层其实就是 数组 + 数据结构
数据结构: 存储数据的方式
集合的分类:
单列集合 : 类似于 "长度可变"的一维数组
双列集合 : 双列集合是由2根单列集合组成
单列集合体系结构
学习容器的三步走:
- 如何创建容器
- 增删改查四类功能
- 遍历容器
Collection接口
Collection<E>接口 : 单列集合的根节点
创建容器:
Collection<E> 父引用 = new 任意实现类对象<E>();
格式解释:
<E> : 泛型 -> 不明确的引用数据类型,在这里只是一个代号而已 -> "垃圾分类的标签"
如何使用: 在创建集合的时候,拿具体的引用数据类型的类名去替换E -> <String>,<Student>
什么作用: 约束容器中元素的数据类型
注意事项:
1. E 必须用引用数据类型类名去替换
2. 前后的E类型必须一致(从JDK7开始后方的E就可以省略不写,但是<>不能省略)
3. 如果前后都不写 <E> , 那么此容器的泛型类型 为默认的 Object
增删改查四类功能:
增: boolean add(E e) : 添加元素,返回是否添加成功
删:
boolean remove(Object o) : 根据传入的元素删除集合中指定元素,返回删除是否成功
void clear() : 清空集合中的所有元素
改: 没有set方法 -> 在Collection接口中还没有索引出现
查: 没有get方法 -> 在Collection接口中还没有索引出现
boolean contains(Object o) : 查询传入的元素是否包含于集合中
boolean isEmpty() : 查询集合中是否为空 -> 没有元素返回true
int size() : 获取集合元素的个数和集合的长度
遍历集合:
1. 转数组 : Object[] toArray()
2. 迭代器 : Iterator<E> iterator()
3. 增强for : 快捷代码 -> 集合名.for
Iterator迭代器
Iterator<E>迭代器 : 专门用于集合遍历的
成员方法:
boolean hasNext(): 查看是否有下一个元素
E next(): 获取下一个元素
使用步骤:
1. 集合对象获取迭代器对象
2. 循环包裹遍历动作 -> while 循环
3. 在循环的判断条件语句位置 编写 -> 迭代器对象.hasNext()
4. 在循环体位置编写 -> 迭代器对象.next();
ConcurrentModificationException : 并发修改异常
产生原因: 当使用迭代器对象遍历集合时,使用集合对象对原集合进行增删改操作
解决办法:
1. 不可以在使用迭代器对象遍历集合的时候使用原集合对象对集合内容进行修改
//只要创建了迭代器对象之后就不可以用原集合对象修改
2. 使用列表迭代器去对集合内容进行修改 -> ListIterator
增强for循环
增强for循环 :
格式:
for(泛型类型/数组类型 变量名 : 集合对象/数组对象){
//变量名: 接收容器中的数据
}
只能做遍历 : 增强for循环的底层是一个隐藏的迭代器对象,所以在增强for遍历集合的时候不要对原集合进行增删改操作!!
包装类
包装类 : 四类八种基本数据类型所对应的引用数据类型
//它的出现解决了集合不能存储基本数据类型元素的问题,若集合中需要存储基本数据类型值,请把泛型写成对应的包装类型!!
包装类:
整型
byte Byte
short Short
int Integer
long Long
浮点型
float Float
double Double
字符型
char Character
布尔型
boolean Boolean
包装类的特性:
//都是自动的, 只需要直接赋值
自动装箱 : 基本 --> 引用
Integer i = 100;
自动拆箱: 引用 --> 基本
int num = i;
源码解析:
//自动装箱 : static Integer valueOf(int i)
//Integer i = Integer.valueOf(100);
Integer i = 100;
//自动拆箱 : int intValue()
//int num = i.intValue();
int num = i;
所有的包装类中都有一个解析字符串类型的基本类型值的方法(Character没有): "100","true"
static 对应的基本数据类型 parseXxx("字符串类型的基本类型值");
例如: Integer -> static int parseInt(String intValue);
例如: Boolean -> static boolean parseBoolean(String booleanValue);
....
List接口
List<E>接口 : 元素可重复,元素有索引,元素存取有序的 单列集合的根节点
创建容器:
List<E> 父引用 = new 任意实现类对象<E>();
//选List的实现类: ArrayList/LinkedList/Vector ....
增删改查四类功能:
增:
boolean add(E e) : 添加元素,永远返回true
void add(int index, E element) : 在指定索引位置插入元素
删:
boolean remove(Object o) : 根据传入的元素删除集合中指定元素,返回删除是否成功
E remove(int index) : 根据传入的索引删除指定元素,把被删除的元素返回
void clear() : 清空集合中的所有元素
改:
E set(int index, E element) : 修改指定索引位置上的元素,返回被修改的元素
查:
E get(int index) : 获取指定索引位置上的元素
boolean contains(Object o) : 查询传入的元素是否包含于集合中
boolean isEmpty() : 查询集合中是否为空 -> 没有元素返回true
int size() : 获取集合元素的个数和集合的长度
int indexOf(Object o) : 查询传入元素第一次出现在集合的索引位置,没找到返回-1
int lastIndexOf(Object o) : 查询传入元素最后一次出现在集合的索引位置,没找到返回-1
遍历集合:
1. 转数组 : Object[] toArray()
2. 普通迭代器 : Iterator<E> iterator()
3. 增强for : 快捷代码 -> 集合名.for
4. 普通for循环 : size() for get
5. 列表迭代器(List集合专属) : ListIterator<E> listIterator()