### 基础类库
1,系统相关:
(1),Scanner:基于正则表达式的文本扫描器,可以从文件、输入流、字符串作为数据源,用于从文件、输入流、字符串中解析数据。
- 方法:hasNextXxx():判断是否还有下一个输入项,如果只是判断是否有下一个字符串,则直接使用hasNext()
- nextXxx():获取下一个输入项
(2),Scanner提供了两个简单的方法来逐行读取:
- boolean hasNextLine():返回输入是否还有下一行
- String nextLine():返回输入的下一行字符串
(3),System:提供了代表标准输入、标准输出和错误输出的类变量,其还提供了获取系统当前时间的方法,提供了返回精确哈希值的方法:
- System类的in、out、err分别代表系统的标准输入、标准输出、错误输出,并提供了setIn()、setOut()、setErr()来改变系统的标准输入、标准输出、错误输出。
- currentTimeMillis()和nanoTime(),它们都返回一个long型整数
- identityHashCode(Object x):返回指定对象的精确hashcode值,通过地址来计算的
2,Java中常用的类:
(1),Object类:是所有类、数组、枚举类的父类,当一个类没有显式的指定父类时,将会默认Oblect为其父类,所以所有的Java类都是Object的子类,任何对象都可以调用Object类的方法
(2),Object类的几个常用方法:
- boolean equals(Object obj):判断指定对象是否与该对象相等,两个对象是同一对象才行,后续用到几乎都会根据之际需要重写此方法
- Class<?>getClass():返回该对象运行时的类
- int hashCode():返回该对象的hashcode值,在默认情况下,是根据地址来计算的
- String toString():返回该对象的字符串表示,默认返回"运行时类名@十六进制hashCode值"格式的字符串,后续用到用于描叙自己,几乎都要根据实际需要重写
(3),String、StringBuffer和StringBuilder: - String是不可变类,即一旦被创建,包含在 这个对象中的字符串序列是不可变的,直至对象被销毁
- StringBuffer对象代表一个字符序列可变的字符串,可通过所提供的方法append()、insert()、reverse()、setCharAt()、setLength()改变这个字符串的对象序列
- StringBuilder类,与上一个很相同,但不同的是,StringBuffer线程是安全的,性能较低,而StringBuilder则相反,一般都会先选择StringBuilder,因为性能高,快,除非特意指定说明
- int compareTo(String anotherString):比较两个字符串的大小,如果两个字符串的序列相等则返回0,否则,从两个字符串的第0的字符开始比较,返回第一个不相等的字符差
(4),Math类
- 其构造器被定义成private的,所以无法创建对象,但其里面的所有方法都是类方法,可以直接通过类名来调用
(5),ThreadLocalRandom与Random
- Random专门用于生成一个伪随机数,ThreadLocalRandom与其作用一样,但不同的是,后者可以保证更好的线程安全
- ThreadLocalRandom提供了一个静态的current()方法来获取对象,获取后即可用各种nextXxx()方法来获取伪随机数
(6),BigDecimal类
- 针对于精确,计算浮点数,提供了add()、subtract()、multiply()、divide()、pow()用于精确浮点数的基本运算
3,日期时间类
(1),Date类
- 处理日期、时间
- boolean after(Date when):判断该日期是否在指定日期之后
- boolean before(Date when):判断该日期是否在指定日期之前
- long getTime():返回时间对应的long型整数,以毫秒作为计时单位
(2),Calendar类,因其Date类太拉跨,诞生了它,是个抽象类
- 因其是个抽象类,不能用指定的构造器来创建对象,但提供了getInstance()方法来获取对象,根据TimeZone,Locale类来获取特定的Calendar,如不指定则使用默认的
- Date的方法它几乎都有,还提供了大量的访问、修改日期时间的方法
- 特别注意add与roll的区别,add(int field,int amount):当被修改的字段超出它的范围时,会发生进位;如果下一级字段也需改变,那么该字段会修正到变化的最小值。roll()的规则:当被修改的字段超出它的范围时,不会发生进位;但下一字段的改变规则一样
4,正则表达式
一、校验数字的表达式
数字:1*$
n位的数字:^\d{n}$
至少n位的数字:^\d{n,}$
m-n位的数字:^\d{m,n}$
零和非零开头的数字:^(0|[1-9][0-9]*)$
非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$
带1-2位小数的正数或负数:^(-)?\d+(.\d{1,2})?$
正数、负数、和小数:^(-|+)?\d+(.\d+)?$
有两位小数的正实数:2+(.[0-9]{2})?$
有1~3位小数的正实数:3+(.[0-9]{1,3})?$
非零的正整数:4\d*$ 或 ^([1-9][0-9]){1,3}$ 或 ^+?[1-9][0-9]$
非零的负整数:^-[1-9][]0-9"$ 或 ^-[1-9]\d$
非负整数:^\d+$ 或 5\d*|0$
非正整数:^-[1-9]\d*|0$ 或 ^((-\d+)|(0+))$
非负浮点数:^\d+(.\d+)?$ 或 6\d*.\d*|0.\d*[1-9]\d*|0?.0+|0$
非正浮点数:^((-\d+(.\d+)?)|(0+(.0+)?))$ 或 ^(-([1-9]\d*.\d*|0.\d*[1-9]\d*))|0?.0+|0$
正浮点数:7\d*.\d*|0.\d*[1-9]\d*$ 或 ^(([0-9]+.[0-9][1-9][0-9])|([0-9][1-9][0-9].[0-9]+)|([0-9][1-9][0-9]))$
负浮点数:^-([1-9]\d*.\d*|0.\d*[1-9]\d*)$ 或 ^(-(([0-9]+.[0-9][1-9][0-9])|([0-9][1-9][0-9].[0-9]+)|([0-9][1-9][0-9])))$
浮点数:^(-?\d+)(.\d+)?$ 或 ^-?([1-9]\d*.\d*|0.\d*[1-9]\d*|0?.0+|0)$
二、校验字符的表达式
汉字:8{0,}$
长度为3-20的所有字符:^.{3,20}$
由26个英文字母组成的字符串:11+$
由26个大写英文字母组成的字符串:12+$
由26个小写英文字母组成的字符串:13+$
由数字和26个英文字母组成的字符串:14+$
由数字、26个英文字母或者下划线组成的字符串:^\w+$ 或 ^\w{3,20}$
中文、英文、数字包括下划线:15+$
可以输入含有^%&’,;=?KaTeX parse error: Can't use function '\"' in math mode at position 1: \̲"̲等字符:[^%&',;=?\x22]+ 12 禁止输入含有的字符:[^\x22]+
其它:
.*匹配除 \n 以外的任何字符。
/[\u4E00-\u9FA5]/ 汉字
/[\uFF00-\uFFFF]/ 全角符号
/[\u0000-\u00FF]/ 半角符号
集合
1,集合的概念与作用
(1),集合类主要负责保存、盛装其他数据,也被称为容器类
(2),集合类和数组不一样,数组的元素可以是基本类型,也可以是对象,而集合里只能保存对象
(3),
2,使用Lambda表达式遍历集合
3,使用Iterator遍历集合元素
(1),主要用于遍历Collection集合中的元素,Iterator对象也被称为迭代器
(2),主要方法:
- boolean hasNext():如果被迭代的集合元素还没有被遍历完,则返回true
- Object next():返回集合里的下一个元素
- void remove():删除集合里上一次next方法返回的元素
(3),当使用Iterator对集合元素进行迭代时,Iterator并不是把集合元素本身传给了迭代变量,而是把集合元素的值传给了迭代变量,所以修改迭代变量的值对集合元素本身没有任何影响
(4),当使用Iterator访问Collection集合元素时,Collection集合里的元素不能被改变只有通过Iterator的remove()方法删除上一次next()方法返回集合的元素才可以,否则会引发异常,在迭代时删除集合元素很危险
4,Set集合(元素唯一,不重复)
(1),HashSet
- 不能保证元素的排列顺序,顺序可能与添加顺序不同
- HashSet不是同步的
- 集合元素可以是null
- 判断两个元素相等的标准是两个对象通过equals()方法比较相等
(2),LinkedHashSet
- 根据元素的hashCode来绝对顶元素的储存位置,它同时使用链表维护元素的次序,使得元素看起来是以插入的顺序保存的
(3),TreeSet
- 是SortSet接口的实现类
- compareto()方法,来比较元素之间的大小关系,用于排序,可重写该方法
- 此集合底层为一棵红黑树,所以元素不唯一,但始终有序
5,List集合
(1),List和ListIterator接口
- List是Collection接口的子接口,可以使用Collection的全部方法,List集合元素有序,可重复
- List集合可以根据位置索引来访问集合中的元素,所以List集合中多了一种遍历的方法,使用普通的for循环来遍历集合元素
(2),ArrayList类与Victor类
- 二者显著区别,ArrayList是线程不安全的而Victor是线程安全的
6,Queue和Deque接口
(1),Queue同于模拟队列这种数据结构
(2),Deque接口是Queue接口的子接口,代表一个双端队列,
(3),ArrayDeque可以用于模拟栈着种数据结构
7,Map
(1),存放的元素是key-value对
(2),Hashtable不允许null作为key-value对,线程安全
(3),线程不安全,性能高
(4),HashMap里的key不能重复,所以HashMap里最多只有一个key-value对的key为null,但可以有无数多个key-value对里的value为null
8,操作集合的工具类:Collections
提供了一系列常用的集合操作