JavaSE进阶(9~12)
9-API&集合
一、时间日期类&Collection
日期类
1,北京时间需要在世界标准时间上加8小时。
2,1秒=1000毫秒
3,计算机中的时间原点为:1970年1月1日 00:00:00
1、Date 类概述和构造方法
Date
代表了一个特定的时间,精确到毫秒
2020年1月1日 0:0:0
2030年1月1日 11:11:11
Date date1 = new Date();
把当前时间封装成一个Date对象;
Date date2 = new Date(0L);
把从时间原点开始,过了指定毫秒的时间,封装成一个Date对象,需要考虑时差问题。
示例代码:
package com.itheima.mydate;
import java.util.Date; /*导包 */
public class DateDemo1 {
public static void main(String[] args) {
// 那么这个时间就表示电脑中的当前时间。
Date date1 = new Date(); // 打印的是毫秒是!
System.out.println(date1);
// 从计算机的时间原点开始,过了指定毫秒的那个时间。
Date date2 = new Date(0L);
System.out.println(date2);// Thu Jan 01 08:00:00 CST 1970
// 从时间原点开始,过了0毫秒。
// 因为我们是在中国,我们是在东八区加了8小时。
// 1970年1月1日 上午的9点
Date date3 = new Date(3600L * 1000);
System.out.println(date3);
}
}
2、Date 类的常用方法(成员方法)
-
常用方法
方法名 说明 public long getTime()
获取的是日期对象从1970年1月1日 00:00:00到现在的毫秒值 public void setTime(long time)
设置时间,给的是毫秒值
代码示例:
package com.itheima.mydate;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateDemo2 {
public static void main(String[] args) {
// public long getTime() 获取时间对象的毫秒值
// public void setTime(long time) 设置时间,传递毫秒值
// method1();
// method2();
}
private static void method2() {
Date date1 = new Date();
date1.setTime(0L);
System.out.println(date1);
}
private static void method1() {
// 把当前时间封装成一个date对象
Date date1 = new Date();
// 获取这个date对象的毫秒值 --- 获取当前时间的毫秒值
long time = date1.getTime();
System.out.println(time);
long time2 = System.currentTimeMillis(); //获取当前时间的毫秒值
System.out.println(time2);
}
}
3、SimpleDateFormat 类概述
SimpleDateFormat
可以对Date对象,进行格式化和解析;
SimpleDateFormat 的构造方法
SimpleDateFormat 格式化和解析(成员方法)
1. 格式化(从 Date 到 String )
public final String format(Date date)
:将日期格式化成日期/时间字符串
2. 解析(从 String 到 Date )
public Date parse(String source)
:从给定字符串的开始解析文本以生成日期
格式化代码:
package com.itheima.mydate;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateDemo3 {
public static void main(String[] args) {
// 当前时间的Date对象
Date date = new Date();
// 创建了一个日期格式。
// SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
// SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String result1 = sdf.format(date);
System.out.println(result1);// 输出的是格式化之后的时间格式;
}
}
解析代码:
package com.itheima.mydate;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateDemo4 {
public static void main(String[] args) throws ParseException {
String s = "2048-01-01";
// SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日HH:mm:ss");//格式不一致,解析错误;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = sdf.parse(s);
System.out.println(date);
}
}
SimpleDateFormat 小结
1. 格式化(从 Date 到 String )
public final String format(Date date)
: 把时间按照固定格式进行展示;
2. 解析(从 String 到 Date )
public Date parse(String source)
:需要对时间进行计算时使用;
案例:
小贾下单并付款的时间为:2020年11月11日 0:03:47
用代码说明这位同学有没有参加上秒杀活动?
步骤:
1,判断下单时间是否在开始到结束的范围内
2,把字符串形式的时间变成毫秒值
代码演示:
package com.itheima.mydate;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateDemo5 {
public static void main(String[] args) throws ParseException {
// 开始时间:2020年11月11日 0:0:0
// 结束时间:2020年11月11日 0:10:0
// 小贾2020年11月11日 0:03:47
String start = "2020年11月11日 0:0:0";
String end = "2020年11月11日 0:10:0";
String jia = "2020年11月11日 0:03:47";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
long startTime = sdf.parse(start).getTime();
long endTime = sdf.parse(end).getTime();
long jiaTime = sdf.parse(jia).getTime();
if (jiaTime >= startTime && jiaTime <= endTime) {
System.out.println("小贾同学参加上了秒杀活动");
} else {
System.out.println("小贾同学没有参加上秒杀活动");
}
}
}
4、集合的概述
数组的长度是不可变的,集合的长度是可变的。
数组可以存储基本数据类型也可以存储引用数据类型
int [] arr1 = {
1,2,3}; //基本数据类型;
String [] arr2 = {
"a","b","c"}; //引用数据类型;
集合不能存储基本数据类型,如果集合要存储基本数据类型,那么实际存储的是他们的包装类;
ArrayList<int> list2 = new ArrayList<int>(); //报错
ArrayList<Integer> list2 = new ArrayList<>();
list2.add(1);
集合类体系结构
5、Collection集合
Collection集合概述
- 是单例集合的顶层接口,它表示一组对象,这些对象也称为Collection的元素
- JDK 不提供此接口的任何直接实现,它提供更具体的子接口(如Set和List)实现
创建Collection集合的对象
- 多态的方式
- 具体的实现类ArrayList
Collection 集合常用方法
代码实现:
package com.itheima.mycollectiondemo1;
public class MyCollectonDemo2 {
public static void main(String[] args) {
//创建对象;
Collection<String> collection = new ArrayList<>();
// boolean add(E e) 添加元素
collection.add("aaa");
// method1(collection);
}
// 集合中元素的个数
private static void method6(Collection<String> collection) {
int size = collection.size();
System.out.println(size);
}
// 判断集合是否为空
private static void method5(Collection<String> collection) {
collection.clear();
boolean result = collection.isEmpty();
System.out.println(result);
}
// 判断集合中是否存在指定的元素
private static void method4(Collection<String> collection) {
boolean result = collection.contains("a");
System.out.println(result);
boolean result2 = collection.contains("aaa");
System.out.println(result2);
}
// 清空集合方法
private static void method3(Collection<String> collection) {
// 就是将集合中所有的元素全部删除.
collection.clear();
System.out.println(collection);
}
//根据条件进行删除
private static void method2(Collection<String> collection) {
// boolean removeif(Object o) 根据条件进行删除
// removeif底层会遍历集合,得到集合中的每一个元素
// s依次表示集合中的每一个元素
// 就会把这每一个元素都到lambda表达式中去判断一下
// 如果返回的是true,则删除
// 如果返回的是false,则保留不删除.
// boolean test(String t);
collection.removeIf( // 删除长度为3的;
(String s) -> {
// s是形参;
return s.length() == 3;
}
);
System.out.println(collection);
}
//删除元素
private static void method1(Collection<String> collection) {
// 传参;
// boolean remove(Object o) 从集合中移除指定的元素
// 删除成功,则返回true;删除失败,返回false
boolean result1 = collection.remove("aaa"); // 返回true
boolean result2 = collection.remove("ddd"); // 返回false
System.out.println(result1);
}
}
6、Collection 集合的遍历(迭代器)
Iterator
:迭代器,集合的专用遍历方式
Iterator<E> iterator()
:返回集合中的迭代器对象,该迭代器对象默认指向当前集合的0索引。
Iterator中的常用方法
boolean hasNext()
:判断当前位置是否有元素可以被取出;
E next()
:获取当前位置的元素;
将迭代器对象移向下一个索引位置;
package com.itheima.mycollectiondemo1;
public class MyCollectonDemo3 {
public static void main(String[] args) {
Collection<String> list = new ArrayList<>();
list.add("a");
list.add("b");
// 1,获得迭代器的对象
// 迭代器对象一旦被创建出来,默认指向集合的0索引处
//Iterator<E> iterator():返回此集合中元素的迭代器,通过集合的iterator()方法得到
Iterator<String> it = list.iterator();
// 利用迭代器里面的方法进行遍历
// 当前位置是否有元素可以被取出
// //取出当前位置的元素 + 将迭代器往后移动一个索引的位置
while (it.hasNext()) {
// 使用循环将集合中的内容全部取出;
System.out.println(it.next());
}
}
}
迭代器小结
Iterator<E> iterator()
:创建迭代器对象,默认指向当前集合的0索引。
boolean hasNext()
:判断当前位置是否有元素可以被取出
E next()
:获取当前位置的元素
将迭代器对象移向下一个索引位置
7、迭代器中删除的方法
练习:创建一个集合,有元素 a b b c d
循环遍历这个集合,判断当前获取到的元素是否为b,如果是就删除(删除b元素)
代码示例:
package com.itheima.mycollectiondemo1;
public class MyCollectonDemo4 {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("b");
list.add("c");
//普通方法,循环遍历集合,删除所有b元素
for (int i = 0; i < list.size(); i++) {
String s = list.get(i);
if ("b".equals(s)) {
list.remove(i);
i--;
}
}
System.out.println(list);
//迭代器方法
Iterator<String> it = list.iterator();
while(it.hasNext()){
String s = it.next();
if(