(First):准备工作
因为我这个画图板要用到自定义队列,所以,实现先将简单的自定义队列叙述一遍。
这里我先说明一下:
这个自定义队列的特点:1.长短不固定。2.类型不固定。
为什么要使用? 因为可以根据我们的需要,添加或者删除不同的数据,这个队列不仅仅可以用在我所使用的画图板程序,也可以使用在其他需要长短变换,类型变化的程序中去;
接着随我来...
第一步,创建一个自定对队列的接口:QueueInterface,方便以后在用到自定义队列时直接添加
//自定义队列的接口
public interface QueueInterface<E> {
//添加
public void add(Object num);
//删除
public void delete(int index);
//修改
public void modify(int index,Object num);
//插入
public void insert(int index,Object num);
//得到
public E getnum(int index);
//得到长度
public int getsize();
}
这里需要注意的地方是:我在自定义队列中放入了一个范类型;这个类型不固定,可以是String,Integer或者是自己所创建的类型也可以
形象的比喻:这是一个盒子,盒子里面放的是什么由你这个主人来确定,
好处是:由于你要使用一个类型就创建一个该类型的队列,所以,结果是你要使用多少类型就不停的重复着这一个相同的动作,造成了代码的冗余。用这个范类型可以解决这个问题;
接着就要实现这一借口:QueueList
/**
* 队列
* @author Administrator
*
* @param <E>
*/
public class QueueList<E> implements QueueInterface<E> {
//创建一个新数组
private Object[] Q = new Object[0];
/**
* 添加队列
* num:添加的数据
*/
public void add(Object num) {
Object[] o = new Object[Q.length + 1];
o[Q.length] = num;
for (int i = 0; i < Q.length; i++) {
o[i] = Q[i];
}
Q = o;
}
/**
* 删除队列的元素
* index:要删除对象的索引
*/
public void delete(int index) {
Object[] o = new Object[Q.length - 1];
for (int i = 0; i < Q.length; i++) {
if (i < index) {
o[i] = Q[i];
}
if (i > index) {
o[i - 1] = Q[i];
}
}
Q = o;
}
/**
* 修改队列的元素
* index:修改对象的索引
* num: 修改后的数据
*/
public void modify(int index, Object num) {
Q[index] = num;
}
/**
* 插入到队列的元素
* index:插入的索引
* num: 插入的元素
*/
public void insert(int index, Object num) {
Object[] o = new Object[Q.length + 1];
for (int i = 0; i < Q.length + 1; i++) {
if (i < index) {
o[i] = Q[i];
}
if (i == index) {
o[i] = num;
}
if (i > index) {
o[i] = Q[i - 1];
}
}
Q = o;
}
/**
* 得到队列中的元素
* index :获得元素的索引
*/
public E getnum(int index) {
E e = (E) Q[index];
return e;
}
/**
* 得到长度
*/
public int getsize(){
return Q.length;
}
}
这个程序很长,其实大多都是高级语言相通的;
这里我说明一下几点:
1.
private Object[] Q = new Object[0];
这个是创立一个新的数组,没有任何元素,长短是固定的;
所以,在下面各个可以改变数组长短大小的方法中,需要新创建一个新的数组,比如add(),delete(),insert()....
2.
得到数组中的某一个元素
public E getnum(int index) {
E e = (E) Q[index];
return e;
}
这里用了一个强制转换。因为所有的类型都是Object类型的子类,所以,这里的E类型是Object的子类,而Q是Object的对象,e是E类型的对象。小的转换成大的需要用强制转换
则有E e=(E)Q,后面的方括号里面的则是得到数组的下标;
另:
附件则是检验这个队列的方法
有兴趣的或者想挑问题的朋友可以下载下来试试我写的方法是否有误,嘿嘿。
因为我这个画图板要用到自定义队列,所以,实现先将简单的自定义队列叙述一遍。
这里我先说明一下:
这个自定义队列的特点:1.长短不固定。2.类型不固定。
为什么要使用? 因为可以根据我们的需要,添加或者删除不同的数据,这个队列不仅仅可以用在我所使用的画图板程序,也可以使用在其他需要长短变换,类型变化的程序中去;
接着随我来...
第一步,创建一个自定对队列的接口:QueueInterface,方便以后在用到自定义队列时直接添加
//自定义队列的接口
public interface QueueInterface<E> {
//添加
public void add(Object num);
//删除
public void delete(int index);
//修改
public void modify(int index,Object num);
//插入
public void insert(int index,Object num);
//得到
public E getnum(int index);
//得到长度
public int getsize();
}
这里需要注意的地方是:我在自定义队列中放入了一个范类型;这个类型不固定,可以是String,Integer或者是自己所创建的类型也可以
形象的比喻:这是一个盒子,盒子里面放的是什么由你这个主人来确定,
好处是:由于你要使用一个类型就创建一个该类型的队列,所以,结果是你要使用多少类型就不停的重复着这一个相同的动作,造成了代码的冗余。用这个范类型可以解决这个问题;
接着就要实现这一借口:QueueList
/**
* 队列
* @author Administrator
*
* @param <E>
*/
public class QueueList<E> implements QueueInterface<E> {
//创建一个新数组
private Object[] Q = new Object[0];
/**
* 添加队列
* num:添加的数据
*/
public void add(Object num) {
Object[] o = new Object[Q.length + 1];
o[Q.length] = num;
for (int i = 0; i < Q.length; i++) {
o[i] = Q[i];
}
Q = o;
}
/**
* 删除队列的元素
* index:要删除对象的索引
*/
public void delete(int index) {
Object[] o = new Object[Q.length - 1];
for (int i = 0; i < Q.length; i++) {
if (i < index) {
o[i] = Q[i];
}
if (i > index) {
o[i - 1] = Q[i];
}
}
Q = o;
}
/**
* 修改队列的元素
* index:修改对象的索引
* num: 修改后的数据
*/
public void modify(int index, Object num) {
Q[index] = num;
}
/**
* 插入到队列的元素
* index:插入的索引
* num: 插入的元素
*/
public void insert(int index, Object num) {
Object[] o = new Object[Q.length + 1];
for (int i = 0; i < Q.length + 1; i++) {
if (i < index) {
o[i] = Q[i];
}
if (i == index) {
o[i] = num;
}
if (i > index) {
o[i] = Q[i - 1];
}
}
Q = o;
}
/**
* 得到队列中的元素
* index :获得元素的索引
*/
public E getnum(int index) {
E e = (E) Q[index];
return e;
}
/**
* 得到长度
*/
public int getsize(){
return Q.length;
}
}
这个程序很长,其实大多都是高级语言相通的;
这里我说明一下几点:
1.
private Object[] Q = new Object[0];
这个是创立一个新的数组,没有任何元素,长短是固定的;
所以,在下面各个可以改变数组长短大小的方法中,需要新创建一个新的数组,比如add(),delete(),insert()....
2.
得到数组中的某一个元素
public E getnum(int index) {
E e = (E) Q[index];
return e;
}
这里用了一个强制转换。因为所有的类型都是Object类型的子类,所以,这里的E类型是Object的子类,而Q是Object的对象,e是E类型的对象。小的转换成大的需要用强制转换
则有E e=(E)Q,后面的方括号里面的则是得到数组的下标;
另:
附件则是检验这个队列的方法
有兴趣的或者想挑问题的朋友可以下载下来试试我写的方法是否有误,嘿嘿。