Timer定时器 and 数据结构(基于数组,基于链表)
1. 定时器
2. 数据结构
1. 定时器
1.1 定时器执行任务的认识
(1) 定时炸弹: 一个炸弹 + 一个定时器组成的
(2) 原理: 当定时器到指定时间了就引爆炸弹(到了指定时间执行指定的任务)
1.2 什么是定时器
定时任务 java.util.TimerTask 由定时器 java.util.Timer 安排为一次执行或重复执行的任务
Timer :
可以遇到的场景: 炸弹, 闹钟, 电器, OA(办公自动化)
构造方法: Timer() 创建一个新的定时器
方法: void schedule(TimerTask task , long delay) 在指定延迟时间之后执行
void schedule(TimerTask task , Date time) 在指定的时间执行
void schedule(TimerTask task , Date firstTime , long period) 在指定的时间每隔多时间重复执行
void scheduleAtFixedRate(TimerTask task , Date firstTime , long period) 在指定的时间每隔多少时间重复执行,并且将没有执行的补充执行
2. 数据结构
数据结构: 对数组存储的一种方式(结构)
1. 基于数组的结构
基本数据类型
数组
字符串
String StringBuilder
底层 数组 char
默认大小16 超过了16 大小,创建一个新的数组,新的数组是原始数组的2倍
创建指定大小的字符串 int[ ]
通过方法来添加数组
基于数组的数据结构:
容器1.0 :
1. 只能存储 int 整数
2. 实现半自动扩容
3. 全自动扩容
4. 重写 toString
5. 通过索引查找元素
6. 通过索引删除元素
7. 获取容器元素长度(存储的个数)
特点:
1. 新增 (性能低)
2. 修改 (性能高)
3. 查询 (性能高)
4. 删除 (性能低)
2. 基于链表的结构 LinkedList
自定义一个新的类型Node,类里面定义两个字段,
一个Object类型字段存放值
一个Node类型字段,存放下一个Node对象地址
新认识: LinkedList Node
链表新增方法: void add (Object value)
创建盒子: Node n = new Node(value);
首部节点: firstNode
尾部节点: endNode
容器1.0:
1. 存储任意的类型
2. 新增数据
3. 重写 toString
总结:
链表特点:
新增: 性能高
删除: 性能高
修改: 性能低
查询: 性能低
重写 toString 方法:
@Override
public String toString( ) {
StringBuilder sb = new StringBuilder( "[" ) ;
// 循环遍历链表;
Node n = firstNode;
while( n != null ) {
// 取出数据拼接到字符串中;
sb.append(n.getValue( ) ) ;
// 判断是否存在下一个节点;
if (n.nextNode != null) {
sb.append(","); }
// 获取下一个节点;
n = n.nextNode; }
sb.append("]");
return sb.toString(); }