JAVA学习(十)| 日期与时间、正则表达式
日期与时间⁍
计算机通过Locale来针对当地用户习惯格式化日期、时间、数字、货币等。
Locale由语言_国家的字母缩写构成,例如,zh_CN表示中文+中国,en_US表示英文+美国。语言使用小写,国家使用大写。
对于日期来说,不同的Locale,例如,中国和美国的表示方式如下:
zh_CN:2016-11-30
en_US:11/30/2016
Java有两套日期和时间的API:
旧的Date、Calendar和TimeZone;
新的LocalDateTime、ZonedDateTime、ZoneId等。
分别位于java.util和java.time包中。
⭐ 从Java 8开始,java.time包提供了新的日期和时间API,主要涉及的类型有:
本地日期和时间:LocalDateTime,LocalDate,LocalTime;
带时区的日期和时间:ZonedDateTime;
时刻:Instant;
时区:ZoneId,ZoneOffset;
时间间隔:Duration。
以及一套新的用于取代SimpleDateFormat的格式化类型DateTimeForma ...
JAVA学习(九)| IO
IO⁍
IO流是一种流式的数据输入/输出模型:
二进制数据以byte为最小单位在InputStream/OutputStream中单向流动;
字符数据以char为最小单位在Reader/Writer中单向流动。
Java标准库的java.io包提供了同步IO功能:
字节流接口:InputStream/OutputStream;
字符流接口:Reader/Writer。
而java.nio则是异步IO
同步IO是指,读写IO时代码必须等待数据返回后才继续执行后续代码,它的优点是代码编写简单,缺点是CPU执行效率低。
而异步IO是指,读写IO时仅发出请求,然后立刻执行后续代码,它的优点是CPU执行效率高,缺点是代码编写复杂。
File对象⁍
Java标准库的java.io.File对象表示一个文件或者目录:
创建File对象本身不涉及IO操作;
12import java.io.*;File f = new File("C:\\Windows\\notepad.exe");
Windows平台使用\作为路径分隔符,在Java字符串中需要用\\表示一个\ ...
python提取Leetbook和Leetcode题解为markdown笔记
项目源码地址⁍
Augu1sto/leet2md: 将leetcode.cn上面的部分leetbook和solution题解保存为markdown文件 (github.com)
需求分析⁍
在阅读Leetcode题解、Leetbook(如图解算法数据结构 - LeetBook - 力扣(LeetCode)全球极客挚爱的技术成长平台 (leetcode-cn.com))要做markdown笔记时,复制粘贴总会出现格式混乱/公式渲染等问题。经过一阵尝试和分析之后,打算直接用python爬取整个网页内容,将文章保存存为markdown格式再进行编辑。
网页分析⁍
以图解算法数据结构 - LeetBook - 力扣(LeetCode)全球极客挚爱的技术成长平台 (leetcode-cn.com)为例
通过查看网页源码发现,文章的具体内容是动态加载的,【F12】-网络-Fetch/XHR-刷新,可以查看捕获的数据包。
按大小进行排序,在预览里可以看到每个数据包大致的内容,如下图的数据包大致就是整本书的一个目录索引
看到大概第4个graphql的时候,就看到目标文章了
注意这里的type是 ...
【论文阅读】TrajGAIL·Generating urban vehicle trajectories using generative adversarial imitation learning
论文基本信息⁍
作者:Chu Cao, Mo Li(南洋理工)
年份:2021
会议/期刊:Transportation Research Part C: Emerging Technologies
相关下载:
原文PDF (acm.org)
阅读参考:⁍
开源信息: github ()
简介:
Leetcode|排序
图解算法数据结构 - LeetBook - 力扣(LeetCode)全球极客挚爱的技术成长平台 (leetcode-cn.com)
排序算法简介⁍
概述⁍
排序算法用作实现列表的排序,列表元素可以是整数,也可以是浮点数、字符串等其他数据类型。生活中有许多需要排序算法的场景,例如:
整数排序: 对于一个整数数组,我们希望将所有数字从小到大排序;
字符串排序: 对于一个姓名列表,我们希望将所有单词按照字符先后排序;
自定义排序: 对于任意一个 已定义比较规则 的集合,我们希望将其按规则排序;
同时,某些算法需要在排序算法的基础上使用(即在排序数组上运行),例如:
二分查找: 根据数组已排序的特性,才能每轮确定排除两部分中的哪一部分;
双指针: 例如合并两个排序链表,根据已排序特性,才能通过双指针移动在线性时间内将其合并为一个排序链表。
接下来,本文将从「常见排序算法」、「分类方法」、「时间与空间复杂度」三方面入手,简要介绍排序算法。「各排序算法详细介绍」请见后续专栏文章。
常见算法⁍
常见排序算法包括「冒泡排序」、「插入排序」、「选择排序」、「快速排序」、「归并排序」、「堆排序 ...
JAVA学习(八)| 集合
Java集合简介⁍
Java的java.util包主要提供了以下三种类型的集合:
List:一种有序列表的集合,例如,按索引排列的Student的List;
Set:一种保证没有重复元素的集合,例如,所有无重复名称的Student的Set;
Map:一种通过键值(key-value)查找的映射表集合,例如,根据Student的name查找对应Student的Map。
几个特点:
实现了接口和实现类相分离,例如,有序表的接口是List,具体的实现类有ArrayList,LinkedList等
支持泛型,我们可以限制在一个集合中只能放入同一种数据类型的元素
Java集合使用统一的Iterator遍历,尽量不要使用遗留接口。
java集合框架[1]⁍
集合框架是一个用来代表和操纵集合的统一架构。所有的集合框架都包含如下内容:
**接口:**是代表集合的抽象数据类型。例如 Collection、List、Set、Map 等。之所以定义多个接口,是为了以不同的方式操作集合对象
**实现(类):**是集合接口的具体实现。从本质上讲,它们是可重复使用的数据结构,例如:ArrayList ...
JAVA学习(七)| 泛型
泛型 - 廖雪峰的官方网站 (liaoxuefeng.com)
什么是泛型⁍
泛型就是定义一种模板,例如ArrayList<T>,然后在代码中为用到的类创建对应的ArrayList<类型>
向上转型⁍
类型ArrayList<T>可以向上转型为List<T>(T不能变成父类)
要特别注意:不能把ArrayList<Integer>向上转型为ArrayList<Number>或List<Number>。
使用泛型⁍
12// 可以省略后面的Number,编译器可以自动推断泛型类型:List<Number> list = new ArrayList<>();
泛型接口⁍
在接口中使用泛型
Comparable<T>泛型接口:
12345678public interface Comparable<T> { /** * 返回负数: 当前实例比参数o小 * 返回0: 当前实例与参数o相等 * 返回正数: 当前实例比参数o ...
JAVA学习(六)| 注解
注解⁍
Java的注解可以分为三类:
由编译器使用的注解,例如:
@Override:让编译器检查该方法是否正确地实现了覆写;
@SuppressWarnings:告诉编译器忽略此处代码产生的警告。
这类注解不会被编译进入.class文件,它们在编译后就被编译器扔掉了。
由工具处理.class文件使用的注解,比如有些工具会在加载class的时候,对class做动态修改,实现一些特殊的功能。这类注解会被编译进入.class文件,但加载结束后并不会存在于内存中。这类注解只被一些底层库使用,一般我们不必自己处理。
(最常用)在程序运行期能够读取的注解,它们在加载后一直存在于JVM中,这也是最常用的注解。例如,一个配置了@PostConstruct的方法会在调用构造方法后自动被调用(这是Java代码读取该注解实现的功能,JVM并不会识别该注解)。
配置参数⁍
定义一个注解时,还可以定义配置参数。配置参数可以包括:
所有基本类型;
String;
枚举类型;
基本类型、String、Class以及枚举的数组。
因为配置参数必须是常量,所以,上述限制保证了注解在定义 ...
JAVA学习(五)| 反射
Java的反射是指程序在运行期可以拿到一个对象的所有信息。
解决在运行期,对某个实例一无所知的情况下,如何调用其方法。
Spring 中的反射与反射的原理 | Depp Wang’s Blog
Class类⁍
class是由JVM在执行过程中动态加载的。JVM在第一次读取到一种class类型时,将其加载进内存。
每加载一种class,JVM就为其创建一个Class类型的实例,并关联起来。
注意:这里的Class类型是一个名叫Class的class。它长这样:
123public final class Class { private Class() {}}
Class类的构造方法是private,只有JVM能创建Class实例。
JVM为每个加载的class创建了对应的Class实例,并在实例中保存了该class的所有信息,包括类名、包名、父类、实现的接口、所有方法、字段等,因此,如果获取了某个Class实例,我们就可以通过这个Class实例获取到该实例对应的class的所有信息。
这种通过Class实例获取class信息的方法称为反射(R ...
Leetcode|链表
豆知识⁍
伪头!!⁍
1ListNode phead = new ListNode(-1, head);
java链表基本结构⁍
12345678class ListNode { //类名 :Java类就是一种自定义的数据结构 int val; //数据 :节点数据 ListNode next; //对象 :引用下一个节点对象。在Java中没有指针的概念,Java中的引用和C语言的指针类似 ListNode(int val){ //构造方法 :构造方法和类名相同 this.val=val; //把接收的参数赋值给当前类的val变量 }}
范型写法:使用范型可以兼容不同的数据类型
12345678class ListNode<E>{ //类名 :Java类就是一种自定义的数据结构 E val; //数据 :节点数据 ListNod ...