数据结构

数据结构

定时器

概念

java.util.TimerTask由 Timer 安排为一次执行或重复执行的任务

实现方式

1、这个类就是一个定时器的类而已

在Timer上需要的操作:设置时间(调用其中的方法)

2、Java中已经提供了一个类,供我们使用java.util.timer

3、Timer类:(定时器对象)具有设计时间,时间到了在执行任务的功能;

4、Timer类常用方法:

void schedule(TimerTask task, long delay) 安排在指定延迟后执行指定的任务

schedule(TimerTask task, Date firstTime, long period) :安排指定的任务在指定的时间开始进行重复的固定延迟执行。

schedule(TimerTask task, long delay) :安排在指定延迟后执行指定的任务。

schedule(TimerTask task, long delay, long period) :安排指定的任务从指定的延迟后开始进行重复的固定延迟执行。

同时也重载了scheduleAtFixedRate方法,scheduleAtFixedRate方法与schedule相同,只不过他们的侧重点不同,区别后面分析。

scheduleAtFixedRate(TimerTask task, Date firstTime, long period):安排指定的任务在指定的时间开始进行重复的固定速率执行。

scheduleAtFixedRate(TimerTask task, long delay, long period):安排指定的任务在指定的延迟后开始进行重复的固定速率执行。

数据结构

概念

数据结构定义: 计算机对数据存储的一种安排

数据存储方式

变量存储

数组存储

自定义容器类

实现

定义一个自定义容器类 IntArray

创建一个存放数据的数组 比如 int[] arr = new int[10];

定义一个添加方法 add ,调用一次给当前容器对象添加一个元素;

创建自定义容器类对象,调用add方法,添加元素

自动扩容

当内部数组装满之后,创建一个新的数组arr;

需要把之前的数组拷贝到新数组arr;

使用arr替换之前的数组;

实现存储任意类型

内部使用Object数组来存储Object [] arr

基于链表数据结构

实现

定义容器类,定义一个口袋类(Node),在容器里面有个字段,在容器类里面提供一个add方法;

现在自定义一个类Node(相当于口袋),类里面定义两个字段,一个Object类型存放值,一个Node类型字段,存放下一个Node对象地址.

class Node{

	Object data;//用于存储添加的数据...

	Node next;//用于保存下一个对象的地址

}

完善链表结构add方法

当每次添加的时候,就把数据封装成一个Node对象

在add方法中,把用户传入的数据打包成Node对象Node node = new Node( obj );

在容器类重定义一个字段Node first 表示链表的顶端

把打包好的数据挂在first上面,注意在挂上去之前,先判断,如果是第一次,直接挂上去放到first上,如果第二次,第三次,挂在最后一个添加Node对象的上面;

First等于null的时候,是第一次;直接把Node的值赋值给first就添加好第一个元素;

添加链表结构

每一次添加一个元素的时候,先封装成一个Node对象,添加之前进行判断,

  1. 如果添加的是第一个元素(first == null),直接赋值,

  2. 如果添加的是第二个元素,放到整个链表结构的最后,所以需要找到链表结构中最后一个对象。怎么找到最后一个对象?

  3. 如果Node对象的next字段为空,那么这个对象就是最后一个,怎样找到next对象为空。

临时定义一个变量Node temp;

第一次,temp=first :temp和first同时都指向第一个对象,操作temp相当于操作第一个对象;

判断 (temp.next == null)如果为 false --》转移目标,让temp指向下一个对象; temp.next 就是指的第二个对象地址;

第二次,temp= temp.next :temp指向第二个对象,再一次操作temp,相当于操作第二个对象,

判断 temp.next == null false —》转移目标

直到temp.next == null ,true temp指向对象的next为空,temp.next = node;

public class LinkedList {
	Node n;
	public void add(Object obj){
		Node node = new Node(obj);
		if (n==null) {//如果n为空
			n=node;//把第一个node赋给n
		}else{//如果n不为空
			Node temp=n;//创建一个中间站temp
			while (temp.next!=null) {//传入第三个node,temp.next不为空
				temp=temp.next;//把temp.next赋给temp,temp和n断开,与第二个node连接,第二个temp.next就为null,
			}		
			temp.next=node;//当temp.next为null时,把第二个node赋给temp.next
		}
	}
    @Override
	public String toString() {
    	Node temp=n;
    	StringBuffer str = new StringBuffer("[");
    	while (temp!=null) {
			if (temp.next!=null) {
				str.append(temp.data).append(",");
			} else {
				str.append(temp.data).append("]");
			}
			temp=temp.next;
		}
		return str.toString();
	}	
}
//节点类
class Node{
	Object data;//传入数据
	Node next;//接受下一个节点的地址值
	Node (Object obj){
		data=obj;
	}
	Node(){}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值