1 日期时间类

在 Java 语言中,是通过时间戳来表示时间的。所谓的时间戳,在 Java 中就是指当前时间距离历元(1970-01-01 00:00:00)的时间间隔,单位是毫秒,所以 Java 中时间的本质上是一个 long 类型的整数。

1.1 Date

类 Date 表示特定的瞬间,精确到毫秒。Date 类本质上拥有一个 long fastTime 属性的包装类,提供了很多属性和方法用于快速获取年月日、时分秒。而 fastTime 就是时间戳。

 Date date1 = new Date();
System.out.println(date1); // 获取date1的时间戳
long time1 = date1.getTime();
System.out.println(time1); // 通过时间戳创建Date对象
long ts1 = 0;
Date date2 = new Date(ts1);
System.out.println(date2); // 需求:请构建一个时间,表示未来一天的当前时间。
long ts2 = 24*3600*1000+date1.getTime();
Date date3 = new Date(ts2);
System.out.println(date3.toString());

1.1.1 时间比较

Date 给它的实例提供了几个比较时间的方法,常用的有 before()、after()、compareTo()、equals()。

 // 比较两个时间
Date d1 = new Date();
Date d2 = new Date(d1.getTime()+1000); System.out.println(d1.before(d2));
System.out.println(d1.after(d2)); System.out.println(d1.compareTo(d2)); System.out.println(d1.equals(d2));

1.1.2 日期时间的格式化

  • 把 Date 对象格式化成特定的字符串

首先要创建一个 SimpleDateFormat 类的对象,该类的构造器可以传入一个 String 类型的参数,定制日期的格式,接着可以通过对象的 format(Date date)方法输出格式化后的日期字符串。其中 y 代表年,M 代表月,d 代表日,H 代表24小时制的小时,m代表分,s代表秒。

 Date date = new Date();
System.out.println(date); // 日期格式化->字符串
SimpleDateFormat df = new SimpleDateFormat();
// [1]使用默认的模式和语言环境
// 19-4-29 下午3:36
String dateStr = df.format(date);
System.out.println(dateStr); // [2]使用指定模式格式化
// xxxx年xx月xx日 xx时xx分xx秒
SimpleDateFormat df2 = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
String dateStr2 = df2.format(date);
System.out.println(dateStr2); // 修改模式
// df2.applyPattern("yyyy-MM-dd");
df2.applyPattern("yyyy/MM/dd");
String dateStr3 = df2.format(date);
System.out.println(dateStr3);
  • 把特定格式字符串解析成 Date 对象

同样通过设置了特定格式的 SimpleDateFormat 类的对象来完成解析,如果无法解析会抛出异常。

 String str = "2019-04-29 15:48:00";

 SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// 把子串->Date
try {
Date date = df.parse(str);
System.out.println(date);
} catch (ParseException e) {
e.printStackTrace();
}

1.2 Calendar

Date本身很多方法在 jdk1.1 已经过时,jdk推荐使用 Calendar 取代 Date 获取单独的年、月、日、时、分、秒。Calendar是日历类,本质上内部拥有一个属性 long time。 表示该日历所具体的时间戳。同时Calendar内部通过对time的运算计算出很多日历字段,把这些日历字段存在一个容器中,并提供set/get方法用于设置或者访问这些字段。

Calendar 是一个抽象类,不能直接通过它创建对象,当通过 Calendar 的静态方法getInstance() 时,该方法会自动当前电脑的时区创建合适的子类日历实例。接下来演示如何创建对象,以及使用常用方法。

 // 通过工厂设计模式构建一个对象
Calendar cal = Calendar.getInstance();
System.out.println(cal.toString()); // 获取年
System.out.println(cal.get(Calendar.YEAR));
// 获取月,索引从0开始,0-表示1月
System.out.println(cal.get(Calendar.MONTH));
System.out.println(cal.get(Calendar.DAY_OF_MONTH)); // 时
System.out.println(cal.get(Calendar.HOUR_OF_DAY));
// 分
System.out.println(cal.get(Calendar.MINUTE));
// 秒
System.out.println(cal.get(Calendar.SECOND));
System.out.println(cal.get(Calendar.MILLISECOND)); // 获取星期 一周的第一天是周日开始
System.out.println(cal.get(Calendar.DAY_OF_WEEK)); // 本月的第一天和本月的最后一天
System.out.println(cal.getActualMinimum(Calendar.DAY_OF_MONTH));
System.out.println(cal.getActualMaximum(Calendar.DAY_OF_MONTH));

2 Math

Math 类包含很多用于执行基本数学运算的方法,例如随机数、平方、立方等。

 // 常用属性
System.out.println(Math.PI); // 常用方法
// 绝对值
System.out.println(Math.abs(-10)); // ceil/floor
// 返回比10.1大的最小整数=> 向上取整
System.out.println(Math.ceil(10.1));
// 返回比10.1小的最大整数=> 向下取整
System.out.println(Math.floor(10.1)); // max/min
System.out.println(Math.max(10, 20));
System.out.println(Math.min(10, 20)); // pow(x,y) x的y次方
System.out.println(Math.pow(2, 3)); // Math.random 随机数
// 产生[m,n]随机整数 <=> (int)(Math.random()*(n-m+1)) + m // 四舍五入
System.out.println(Math.round(4.4)); // 把弧度转角度
System.out.println(Math.toDegrees(Math.PI/2));
// 把角度转化成弧度
System.out.println(Math.toRadians(180)); // (C)sin(a)/cos(a)/tan(a)
// cos 和 sin 的参数是弧度
System.out.println(Math.sin(Math.toRadians(30)));

3 枚举类

枚举是由一组固定的常量组成的类型,自定义数据类型。枚举的常量值一定是可列举的有限值。常量值的类型都是public static final。语法:

 [修饰符] enum enumName{
常量值1,
常量值2,
常量值3… 常量值n[;]
}//最后一个分号如果后面没有定义方法的话,可以省略。

可以将枚举类理解成一个类,枚举类可以声明变量,变量的值只能是枚举值的其中一个。枚举值和字符串直接也可以相互转换,但是注意,字符串转成枚举类型的时候,如果枚举中没有此枚举值,会抛出异常。

 enum Gender {
男, 女, 保密;
} main 方法:
// 声明一个Gender枚举类型的变量gender,并取值为男
Gender gender = Gender.男; // 枚举值->字符串
System.out.println(gender.toString()); // 字符串串-> 枚举值
String str = "保密";
// 可能产生IllegalArgumentException 非法参数异常
Gender gender2 = Enum.valueOf(Gender.class, str);
System.out.println(gender2);

switch 中的参数也可以是枚举

 switch (gender){
case 男:
break;
case 女:
break;
case 保密:
break;
}

4 LeetCode

718. 最长重复子数组

给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。

示例 1:

输入:
A: [1,2,3,2,1]
B: [3,2,1,4,7]
输出: 3
解释:
长度最长的公共子数组是 [3, 2, 1]。

说明:

1 <= len(A), len(B) <= 1000
0 <= A[i], B[i] < 100

源码:

 class Solution {
public int findLength(int[] A, int[] B) {
int[][] dp = new int[A.length+1][B.length+1];
dp[0][0] = 0;
int max = 0;
for(int i = 1; i <= A.length; i++)
{
for(int j = 1; j <= A.length; j++)
{
if(A[i-1] == B[j-1])
{
dp[i][j] = dp[i-1][j-1]+1;
max = Math.max(max,dp[i][j]);
}
}
}
return max;
}
}

常用类及 LeetCode 每日一题的更多相关文章

  1. 【python】Leetcode每日一题-前缀树(Trie)

    [python]Leetcode每日一题-前缀树(Trie) [题目描述] Trie(发音类似 "try")或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的 ...

  2. 【python】Leetcode每日一题-二叉搜索迭代器

    [python]Leetcode每日一题-二叉搜索迭代器 [题目描述] 实现一个二叉搜索树迭代器类BSTIterator ,表示一个按中序遍历二叉搜索树(BST)的迭代器: BSTIterator(T ...

  3. 【python】Leetcode每日一题-设计停车系统

    [python]Leetcode每日一题-设计停车系统 [题目描述] 请你给一个停车场设计一个停车系统.停车场总共有三种不同大小的车位:大,中和小,每种尺寸分别有固定数目的车位. 请你实现 Parki ...

  4. 【js】Leetcode每日一题-制作m束花所需的最少天数

    [js]Leetcode每日一题-制作m束花所需的最少天数 [题目描述] 给你一个整数数组 bloomDay,以及两个整数 m 和 k . 现需要制作 m 束花.制作花束时,需要使用花园中 相邻的 k ...

  5. 【JavaScript】Leetcode每日一题-在D天内送包裹的能力

    [JavaScript]Leetcode每日一题-在D天内送包裹的能力 [题目描述] 传送带上的包裹必须在 D 天内从一个港口运送到另一个港口. 传送带上的第 i 个包裹的重量为 weights[i] ...

  6. 【js】Leetcode每日一题-完成所有工作的最短时间

    [js]Leetcode每日一题-完成所有工作的最短时间 [题目描述] 给你一个整数数组 jobs ,其中 jobs[i] 是完成第 i 项工作要花费的时间. 请你将这些工作分配给 k 位工人.所有工 ...

  7. 【js】Leetcode每日一题-数组异或操作

    [js]Leetcode每日一题-数组异或操作 [题目描述] 给你两个整数,n 和 start . 数组 nums 定义为:nums[i] = start + 2*i(下标从 0 开始)且 n == ...

  8. 【js】Leetcode每日一题-解码异或后数组

    [js]Leetcode每日一题-解码异或后数组 [题目描述] 未知 整数数组 arr 由 n 个非负整数组成. 经编码后变为长度为 n - 1 的另一个整数数组 encoded ,其中 encode ...

  9. 【JavaScript】Leetcode每日一题-青蛙过河

    [JavaScript]Leetcode每日一题-青蛙过河 [题目描述] 一只青蛙想要过河. 假定河流被等分为若干个单元格,并且在每一个单元格内都有可能放有一块石子(也有可能没有). 青蛙可以跳上石子 ...

随机推荐

  1. ES系列七、ES-倒排索引详解

    1.单词——文档矩阵 单词-文档矩阵是表达两者之间所具有的一种包含关系的概念模型,图3-1展示了其含义.图3-1的每列代表一个文档,每行代表一个单词,打对勾的位置代表包含关系. 图3-1 单词-文档矩 ...

  2. eclipse 反编译

    Eclipse Class Decompiler安装此插件,可以编译源代码且调试

  3. centos7和centos6.5环境rpm方式安装mysql5.7和mysql5.6详解

    centos环境安装mysql5.7 其实不建议安装mysql5.7 语法和配置可能和以前的版本区别较大,多坑,慎入 1.yum方式安装(不推荐) a.安装mysql5.7 yum源 centos6: ...

  4. 【一通百通】c/php的printf总结

    程序语言都是触类旁通的,讲人话就是[一通百通].so今天说说工作中常用的printf的用法吧. 1.先说说PHP printf()函数: printf()函数的调用格式为: printf(" ...

  5. QA CodeDiff做什么?什么时间做?

    一.QA CodeDiff都在做什么 1.防止开发合并代码出错.要不删除了别人的要不删除了自己的,比如代码冲突后简单的选择使用他人或自己: 2.开发夹杂私货,在不通知QA的情况下私自修改bug或增加功 ...

  6. 解决Linux安装 VMware tools 工具的方法

    一:启动linux服务器,并用远程登录工具访问linux服务器 1:启动系统 2:用服务器控制台   :查看点ip地址 3:用客户端 连接服务器 二:挂起 vm虚拟机的 tools 安装光盘 三:开始 ...

  7. Windows Mac地址伪装步骤

    本文介绍Windows上Mac地址修改方法,适用于网络环境绑定了Mac地址需要修改上网的情况. 工具/原料 PC电脑一台 Windows系统 方法/步骤 点击右下角图标. 点击打开网络和共享中心. 点 ...

  8. 【C++ Primer | 15】C++类内存分布

    C++类内存分布 书上类继承相关章节到这里就结束了,这里不妨说下C++内存分布结构,我们来看看编译器是怎么处理类成员内存分布的,特别是在继承.虚函数存在的情况下. 下面可以定义一个类,像下面这样: c ...

  9. mySQL 增量备份方案

    1.在 /etc/my.cnf 下面设置开启bin-log 编辑 vim /etc/my.cnf [mysqld] binlog_format       = MIXED                ...

  10. Delphi自动适应屏幕分辨率的属性

    https://www.cnblogs.com/zhangzhifeng/category/835602.html 这是个困惑我很长时间的问题,到今天终于得到解决了. 话说Delphi有个很强的窗体设 ...