一.日期的相关类
Date类 //java.utile.Date,该类大量方法已经过时
DateFormat类 SimpleDateFormat类 Calendar类
1.Date 类
Date类的方法:
public long getTime()返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数
public String toLocaleString()已过时,该方法返回的是 Date 对象的字符串表示形式从 JDK 1.1 开始,由 DateFormat.format(Date date) 取代。
使用如图:
2. DateFormat 类
// DateFormat为抽象类,所以不能实例化,所以方法是静态的可以用类名调用,也可以用子类SimpleDateFormat 调用
DateFormat的常用字段值
1).public static final int LONG
2).public static final int SHORT
DateFormat的常用方法:
* public static final DateFormat getInstance() 返回一个DateFormat对象,默认SHORT风格
* static DateFormat getDateInstance(int style) 括号里的是一个静态常量SHORT/LONG
* public final String format(Date date) 将一个 Date 格式化为日期/时间字符串,默认SHORT风格
* public Date parse(String source) (throws ParseException 该方法会抛出异常),解析文本,以生成一个日期。该方法不使用给定字符串的整个文本。
DateFormat可以完成日期的格式化操作
* 格式化(format):Data类型对象---->String类型 String format(Data data) 例如:2018-04-24 21:59:39 星期二
* 解析(parse):String类型时间---->Data类型 Data parse(String source) 例如:Tue Apr 24 21:59:19 CST 2018
使用如图:
3. SimpleDateFormat类
// SimpleDateFormat是DateFormat的子类
* SimpleDateFormat的常用方法:
* void applyPattern(String pattern) 将给定模式字符串应用于此日期格式
* 日期和时间模式 :
"yyyy.MM.dd G 'at' HH:mm:ss z" 2001.07.04 AD at 12:08:56 PDT//如果不申请模式的话,则默认按SHORT格式
使用如图:
//解析 使用什么风格格式化的,则必须使用什么风格解析回去
4.Calendar类
//Calendar是抽象类,不能实例化
* 创建日历对象:
Calendar c=Calendar.getInstance();
* Calendar的常用字段值
public static final int DAY_OF_MONTH
public static final int YEAR
public static final int MONTH
* Calendar的常用方法:
void set(int year, int month, int date) 设置YEAR,MONTH和DAY_OF_MONTH的值
int get(int filed);返回给定日历字段的值 , 该值可以是年,月,日......
public final Date getTime()返回一个表示此 Calendar 时间值(从历元至现在的毫秒偏移量)的 Date 对象。public static Calendar getInstance() 使用默认时区和语言环境获得一个日历。返回的 Calendar 基于当前时间,使用了默认时区和默认语言环境
使用如图:
二.随机数相关类
随机数的产生可以由以下类完成:
1)Math类 Math.random()
2)Random类
3)UUID类
1.Math类
Math类的常用方法
1). public static int round(float a) 四舍五入
2).public static double random() 返回一个在[0.0 1.0)之间的一个随机数
2. Random类
Random类的构造器
public Random() 生成一个新的随机数生成器
public Random(long seed) 使用单个long种子创建一个新的随机数生成器。
Random类的常用方法
public int nextInt(int x) 返回一个在[0 x)之间的随机数
3. UUID
定义:通用唯一识别码(16进制)
UUID类的常用方法
1). public static UUID randomUUID() 返回一个UUID值
2). public String toString() 返回UUID的String对象
如何生成一个4位的验证码,代码如下图所示:
三.Arrays工具类
Arrays工具类的常用方法:
1). public static toString(int[] arr)一个整型数组转化为字符串 ([元素1, 元素2, 元素3......])
2). public static void sort(int[] arr) 将这个整型的数组升序排序
3). public static int binarySearch(int[] arr,int key) 二分查找,在数组arr中寻找数值是key的索引
public static toString(int[] arr)的源码分析
源码如下:
public static String toString(int[] a) {
if (a == null) //非空判断
return "null";
int iMax = a.length - 1; //最大索引
if (iMax == -1) //最大索引为空,则该数组为空数组
return "[]";
StringBuilder b = new StringBuilder(); //创建字符串构造器
b.append('['); //进行拼接
//遍历数组
for (int i = 0; ; i++) {}
public static int binarySearch(int[] arr,int key)的源码分析
源码如下:
private static int binarySearch0(int[] a, int fromIndex, int toIndex,
int key) {
int low = fromIndex; //最小索引 0
int high = toIndex - 1; //最大索引
while (low <= high) {
int mid = (low + high) >>> 1; //无符号右移,算出中间索引
int midVal = a[mid]; //中间索引处元素的值
//判断中间索引处的数值和关键值的大小
if (midVal < key)
low = mid + 1;
else if (midVal > key)
high = mid - 1;
else
return mid; // key found //第一轮如果没有找关键值,则重新算出中间索引,继续循环
}
return -(low + 1); // key not found. //如果该数组没有这个关键值,则返回-1
}
四.System类
System类的常用方法
1).public static void gc() 运行垃圾回收器, 实质是重写了Object类中的fanalize方法
2).public static void exit(int status) 终止正在运行的JVM
3).public static long currentTimeMillis() 返回当前时间的毫秒值 该方法可以测试代码的执行效率
4).public static void arraycopy(object src, int srcpos, object dest, int length )
五.正则表达式(不要求深挖,能看懂别人写的正则表达式即可)
字符:
x x字符
\\ 反斜线字符
\t 制表符
\n 换行符
\r 回车符
字符类:
[abc] a, b或c(简单类)
[^abc] 任何字符除了a, b和c之外
[a-zA-Z] a到两头z或A到Z,两头的字母包含
预定义字符:
. 如果本身就是. \. 在正则表达式中\\.
\d 数字[0-9] 在正则表达式中\\d
\w 单词字符: [a-zA-Z_0-9]字母的大小写,数字字符
边界匹配器
^ 行的开头
$ 行的结尾
\b 单词边界尾
Greedy 数量词
x? x,一次或 一次也没有
x* x,零次或多次
x+ x,一次或多次
x{n} x字符恰好出现n次
x{n,} x字符至少出现n次
x{n,m} x字符至少出现n次,但不超过m次
正则表达式的校验方法:
public boolean matches(String regex) 告知此字符串是否匹配给定的正则表达式,如果匹配则返回true,否则返回为false
使用如图:
public String[] split(String regex) 根据给定正则表达式的匹配拆分此字符串。
使用如图:
六.集合
1.集合数组:存储对象的数组
2.集合的继承体系图
根接口:Collection
子接口:Set , List
List接口的实现类: ArrayList Vector LinkedList
Set接口的实现类: HashSet TreeSet
面试题:
数组和集合的区别?
1).长度区别:
数组长度固定
集合长度不固定
2).内容的区别:
数组可以存储同一种类型的元素
集合可以存储多种类型的元素
3).存储类型的区别
数组:可以存储基本数据类型也可以存储引用类型
集合:只可以存储引用数据类型
3.Collection集合的基本功能:
添加功能:
boolean add(Object e)
注释: 添加功能的源码分析:只要集合中有元素添加就返回true
public boolean add(E e) {
ensureCapacityInternal(size + 1); // Increments modCount!!
elementData[size++] = e;
return true;
}
int size() 获取集合元素个数
转换功能: Object[] toArray() ;将集合转换为数组,一般用于遍历集合中的元素
使用如图:
4.自定集合的遍历
5.集合的高级功能:
boolean addAll(Collection c):添加一个集合的所有元素
boolean removeAll(Collection c):删除的高级功能, 删除一个算是删除还是删除所有算是删除? 答:删除一个就算删除
boolean containAll(Collection c):包含所有元素算是包含,还是包含一个算是包含? 答:包含所有算是包含
交集功能:
boolean retainAll(Collection c):A集合对B集合的交集,交集的元素到底是去了A集合还是去了B集合中
返回的boolean,表达的什么意思?
答:A集合对B集合取交集,交集的元素要到A集合去,boolean返回值指的是A集合的元素有没有发生变化,如果发生
则返回true,否则返回false
6.集合的迭代器
Iterator iterator() :Collection的迭代器方法(获取集合的迭代器),返回的是一个Iterator接口
集合的专有遍历方式:迭代器遍历
Iterator:该接口的方法
boolean hasNext():如果有元素可以迭代,那么返回true,否则返回false
Object next() :返回下一个迭代的元素
使用如图:
7.List接口
//List集合是Collection集合的子类,所以可以使用Collection的遍历方式
List集合的特点:
有序的(存储于取出一致),可以允许重复元素
Set集合的特点:
无序的(不能保证迭代的顺序,给予hashMap),不允许元素重复
List集合的特有功能:
添加功能
void add(int index,object element):在指定位置处添加指定元素
获取功能
Object get(int index) 返回列表中指定位置的元素
ListIterator listIterator() 列表迭代器
删除功能
Object remove(int index) 删除指定位置处的元素
修改功能
Object set(int index,Object element) 用指定element元素替换掉指定位置处的元素
使用如图:
存储自定义对象并遍历的两种方式
1): Iterator iterator()
2):size()和get(方法相结合)
使用如图:
8.ListIterator接口中的方法:
boolean hasNext() 判断是否有下一个可以迭代的元素(正向遍历)
Object next() 获取下一个元素
boolean hasPrevious 判断是否有上一个可以迭代的元素(逆向遍历)
Object previous() 返回一个元素
//逆向遍历的前提是必须有正向遍历
9.异常分析
使用迭代器遍历元素,则不能使用迭代器添加元素,否则会出现ConcurrentModifcationException异常
解决方案:
方式1:使用迭代器遍历元素,则使用迭代器添加元素
方式2:使用集合遍历,使用集合添加元素
并行:指两件事或者多件事在同一时刻发生
并发:指两件事或者多件事在同一时间段发生
10.List的三个子实现类
1). ArrayList
底层数据结构式数组结构,查询快,增删快
从内存角度考虑:线程不安全,不同步,执行效率
解决线程不安全问题有三种解决方式:
方式1.同步代码块
语法格式:
synchronized(同步锁) //一般为this
{
需要同步操作的代码
}
方式2.同步方法
方法的调用,在被调用的方法前加synchronized修饰,方法体中写需要同步操作的代码
方式3.锁机制(lock) //单例模式
语法格式:
class x {
private final ReentrantLock lock=new ReentrantLock()
//......
public void m() {
lock.lock();
try {
//......method body
}finally{
lock.unlock();
}
}
}
2)LinkedList
底层数据结构式链表结构.查询慢,增删快
从内存角度考虑:线程不安全,不同步,执行效率高
3)Vector
这是一个线程安全的类
底层数据结构是数组:查询快,增删慢
线程安全,同步,执行效率低
七.数据结构
1.栈: 先进先出,进栈叫做压栈,出栈叫做弹栈
2.链表:有一个链连接了很多节点
节点的组成:数据和下一节点的地址值