当前位置:网站首页>7.29
7.29
2022-08-02 23:58:00 【剑轩~】
日期
获得当前时间戳
System类中的currentTimeMillis() ;
Date类
两个构造器的使用
两个方法的使用:toString() : 显示当前的年、月、日、时、分、秒;
getTime():获得当前Date对象对应的毫秒数;
public void test2() {
//构造器一:创建一个对应当前时间的Date对象
Date date1 = new Date() ;
date1.toString();
date1.getTime();
//创建指定毫秒数的Date对象
Date date2 = new Date(long time) ;
//如何将java.utile.Date 对象转换成 java.sql.Date 对象
Date date6 = new Date();
java.sql.Date date7 = new java.sql.Date(date6.getTime());
}
SimpleDateFormat
格式化--- 解析,格式化的逆过程
按照指定的方式格式化和解析
// 格式化
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Calender 日历类
实例化:调用静态方法:getInstance();
常用方法:
get():
set():
add():
getTime():
setTime():
JDK8 日期api
不可变性
LocalDate();
LocalTime();
LocalDateTime();
now() ; // 获取当前的日期、时间、日期+时间
of(); // 设置指定的年月日时分秒;没有偏移量
Comparble 和Comparator
像String、包装类等实现了Comparable接口,重写了compareTo()方法。
对于自定义类来说,需要排序,我们可以让自定义类实现Comparable方法;
返回正数,前面的比较大
对比:
Comparble 是较为永久的,写在类中的;保证实现类的对象在任何位置都可以比较大小。
Comparator : 匿名的、临时性的比较。
得到系统版本:System.out.println(System.getProperty("os.version"));
大数、四舍五入 BigDecimal ; 属性:ROUND_HALF_UP
枚举
类的对象只有有限个,确定的;
当需要定义一组常量时,建议使用枚举类
如果只有一个对象,则可以作为单例模式的实现方式
如何定义枚举类
方式一:
JDK5.0之前
class Season() {
//1. 声明Season 对象的属性:private final 修饰;
private final String seasonName ;
private final String seasonDesc;
//2. 私有化类的构造器,并给对象属性赋值
private Seanson(String seasonName,String seasonDesc){
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
}
// 3.提供当前枚举类的多个对象: public static final 的
public static final Seanson xxx = new Season(xxx,xxx) ;
//4 其他诉求:获取枚举类对象的属性
}
方式二:使用enum 关键字来定义
常用方法:
toString();// 不是继承于Object的,是继承于Enum的toString() 方法
values();// 返回对应的枚举的数组
valueOf(String name ); // 返回枚举类中对象名是name的对象,如果没有,则抛异常。
实现接口:
每个对象都去实现接口中的方法;
enum Season1{
// 1.创建当前枚举类的对象,多个对象之间用”,“隔开,末尾对象”;“结束
SPRING("xxxx","xxx"),
SUMMER("xxxx","xxxx"),
AUTUMN("xxxx","xxxx");
}
注解
生成文档相关的注解
自定义注解
// 参照@SuppressWarnings 定义
1. 注解声明为:@interface
2. 内部定义成员,通常用value表示
3. 可以指定成员的默认值,可以用default定义
4. 如果自定义注解没有成员,表明是一个标识作用
如果注解有成员,在使用注解时,需要指明成员的值
元注解
对现有的注解进行解释说明的注解
Retention : 指定所修饰的Annotation 的生命周期:SOURCE/CLASS(默认行为)/RUNTIME
只有声明为RUNTIME生命周期的注解,才能通过反射获取。
Target:用于指定被修饰的Annotation能用于修饰哪些程序元素。
自定义注解通常都会指定以上两个元注解。
Documented:表示所修饰的注解在被javadoc 解析时,保留下来。
Inherited:被它修饰的Annotation 将具有继承性
JDK8 新特性:
可重复注解:
在MyAnnotation上声明@Repeatable,成员值为@MyAnnotations.class
MyAnnotation的Target和Retention和MyAnnotations相同
类型注解:
ElementType.TYPE_PARAMETER : 表示该注解能写在类型变量的声明语句中(如:泛型声明)
ElementType.TYPE_USE : 表明该注解能写在使用类型的任何语句中
集合
Iterator
集合元素的遍历操作,迭代器
迭代器有remove() 方法:如果还未调用next()或在上一次调用next方法之后已经调用了remove方法,再调用remove都会报illegalStateException ;
List接口
面试题:ArrayList、LinkedList、Vector 三者的异同?
同:三个类都是实现了List接口,存储数据特点相同:存储有序、可重复的数据
ArrayList : 作为List接口的主要实现类,线程不安全的,效率高。底层使用Object[] 存储
LinkedList:底层使用双向链表存储。适用频繁的插入、删除操作。
Vector:作为古老实现类,线程安全的,效率低。底层使用Object[] 存储
ArrayList
jdk7 :
初始化,底层创建了长度是10的Object数组;建议使用带参的构造器
扩容:扩容为1.5倍
jdk8:
new对象时,底层初始化为{},在第一次调用add()方法的时候才造这个对象。延迟了数组的创建,节省了内存。
LinkedList
LinkedList list = new LinkedList<>() ; // 内部声明了node类型的first和last属性,默认值为null
区分List中remove(int index) 和 remove(Object obj) : 如果可以不装箱,那就没有必要去装箱
Set
HashSet:线程不安全,可以存储null值
无序性:不等于随机性;存储的数据在底层数组中并非按照数组索引的顺序添加,而是根据数据的哈希值决定的。
不可重复性:保证添加的元素按照equals()判断时,不能返回true;
向HashSet中添加元素a,首先调用元素a所在类的hashCode()方法,计算元素a的哈希值;此时哈希值接着通过某种算法计算出在HashSet底层数组中的存放位置(即为:索引位置),判断数组此位置上是否已经有元素:
如果此位置上没有其他元素,则元素a添加成功。
如果此位置上有其他元素b(或以链表形式存在的多个元素),则比较元素a与元素b的hash值:
如果 hash值不相同,则元素a添加成功
如果hash值相同,进而需要调用元素a所在类的equals()方法: 返回true,添加失败;
对于添加成功的情况2和情况3而言:元素a与已经存在指定索引位置上数据以链表的方式存储:七上八下
向Set中添加的数据,其所在类一定要重写hashCode()和equals();重写的hashCode()和equals()尽可能保持一致性:相等的对象必须具有相等的散列码
public void test3() {
HashSet set = new HashSet() ;
Person p1 = new Person(1001,"AA");
Person p2 = new Person(1002,"BB");
set.add(p1);
set.add(p2);
p1.name = "CC";
// 将p1的值改变,但是没有重新计算哈希值,其原哈希值仍然是用"AA"算出来的
//修改了属性后,仍然是放在原位置
set.remove(p1);// 此时计算哈希值,用的name是cc,因此,没有删成功
System.out.println(set) ;//输出p1和p2
set.add(1001,"CC"); // 此时加的时候是拿CC计算的哈希值去放的,因此,可以添加成功,且是放在数组上的
System.out.println(set) ;// 输出三个
set.add(1001,"AA"); // 添加成功,此时计算出来哈希值,放在原p1的数组位置上,再调用equals()方法,因为不相等,再用链表挂上
System.out.println(set) ; // 输出四个
}
class Person{
//重写了equals和hashcode
int id;
String name ;
}
LinkedHashSet:作为HashSet的子类:遍历其内部数据时,可以按照添加的顺序遍历;对于频繁的遍历操作,其效率高于HashSet();
TreeSet:可以按照添加对象的指定属性,进行排序。
自然排序中,比较两个对象是否相同的标准为:compareTo() 返回0,不再是equals();
定制排序相同
边栏推荐
- Database auditing - an essential part of network security
- js基础知识整理之 —— 全局作用域
- Carefully organize 16 MySQL usage specifications to reduce problems by 80% and recommend sharing with the team
- js基础知识整理之 —— 字符串
- 公司招个程序员,34岁以上两年一跳的不要,开出工资以为看错了
- LVM与磁盘配额原理及配置
- 「PHP基础知识」隐式数据类型
- 机器学习-特征映射方法
- IDEA多线程调试
- 【问题征集】向 iPod 之父、iPhone 联合设计者、Google Nest 创始人 Tony Fadell 提问啦
猜你喜欢
Auto.js 特殊定位控件方法 不能在ui线程执行阻塞操作,请使用setTimeout代替
接口流量突增,如何做好性能优化?
Auto.js special positioning control method cannot perform blocking operations on the ui thread, please use setTimeout instead
js显示隐藏手机号
中科磁业IPO过会:年营收5.5亿 吴中平家族持股85%
令人心动的AI综述(1)
基于rt-thread studio的STM32裸机开发——LED
MySQL的多表查询(1)
淘宝商品销量接口/淘宝商品销量监控接口/商品累计销量接口代码对接分享
聊聊 Nacos
随机推荐
北路智控上市首日破发:公司市值59亿 募资15.6亿
浅谈I2C知识
pytest-常用运行参数
flutter 每个要注意的点
简单聊聊MySQL中的六种日志
嵌入式分享合集26
主流定时任务解决方案全横评
CKAN教程之将 Snowflake 连接到 CKAN 以发布到开放数据门户
十二、form表单的提交
【系统架构设计师】第三章 数据库系统
Day117.尚医通:生成挂号订单模块
十年架构五年生活-05第一次出差
d合并json
从一文中了解SSRF的各种绕过姿势及攻击思路
Vite教程 安装
最近公共祖先(LCA)学习笔记 | P3379 【模板】最近公共祖先(LCA)题解
Teach you to locate online MySQL slow query problem hand by hand, package teaching package meeting
几种常见的跨域解决方法
ASP.NET网络版进销存管理系统源码【源码免费分享】
6、Powershell命令配置Citrix PVS云桌面桌面注销不关机