队列:它可以像数组一样有序的存放对象;但与数组最大的区别就是,它可以自动增长。
1.先定义队列接口
2.编写一个接口的实现类,就可以把它当做一个对列使用
实现队列的思路是:在实现类的内部,还是使用数组保存装入队列的对象;每次新加入对象时,
则创建一个比原来数组长度大于一的数组,将原数组的对象赋给新数组,将新加入的对象加到新数组末尾。
然后,将新数组的首地址传给原来的数组。现在,只要创建这个类的对象,就有了一个可自动增长的“队列”
对象了。
//定义队列接口
public interface 接口名{
//定义方法
//向队列中加入对象
public void add(对象类型 对象名);
//取得队列中指定位置的一个对象
public 对象类型 get(int index);
//得到队列的长度
public int getsize();
//其它方法可自己定义
·······
····
}
//定义队列接口实现类
public class 类名 implements 接口名{
//先声明一个长度为零的数组,用来装对象
private 类名[] srcA = new 类名[0];
//定义一个数组长度
private int size=0;
//添加方法
public void add(对象类型 对象名){
//1.新建一个数组,长度是原数组长度+1;
类名 [] 类名 = new 类名[srcA.length+1];
//2.将原数组的值赋给新数组
for(int i=0;i<srcA.length;i++){
类名 [i] = srcA[i];
}
//3.将要添加的对象添加到新数组的末尾
类名[srcA.length] = 对象名;
//4.将新数组的首地址传给原数组
srcA = 类名;
//5.队列长度加一
size++;
}
//返回队列中指定位置的对象
public void get(int index){
1.判断是否超出范围
if(index<0||index>size){
return null;
}
else{
return 类名[index];
}
}
//返回队列长度
public int getsize(){
return size;
}
//实现其他的方法
····
··
·
}
泛型:关键字<E>
上述队列有一个缺点只能放入某个特定的类的对象,为了解决这个问题,我们可以使用“泛型”语法来解决这
个问题,简单的说,就是创建队列的时候,指定队列的中所存放的对象的类型。
1、自定义泛型队列接口的实现
public interface 接口名<E>{
//向队列中加入对象
public void add(E e);
//去的队列指定位置的对象
public E get(int index);
//其他方法
。。。
}
2、实现的泛型队列
public class 队列名<E> implements 接口名<E>{
//队列内部初始用来装对象的数组,长度为0
priavte Object[] array0 = new Object[0];
//实现接口中 的方法
//添加方法
public void add(E e){
//新建一个数组,长度为原数组长度加一
Object[] array = new Object[array0.length+1];
//将要加入的对象加入到队列的末尾
array[array0.length] = e;
//将原数组内的东西放到新数组中
for(int i=0;i<array0.length;i++){
array[i] = array0[i];
}
//指向新数组
array0 = array;
}
//得到指定队列中指定位置的一个对象,如果指定类型,则转为指定类型返回
public E get (int index){
E st = (E)array0[index];
return st;
}
//实现其他方法
。。。。
}
课后总结:队列实际上就是综合了 数组和引用传递的知识,要知道new一个新数组,数组名中
存的是指向指定大小堆空间 的地址。声明一个空数组作用类似于先得到一个指向堆空间
的地址,将要加的对象加入到新的比原数组长度大一的数组中,再用引用传递将新数组
在堆空间的的地址赋给原数组,此时原数组就指向新数组在堆空间中开辟的空间,于是
就可以调用其中的值或者对象。
队列的使用步奏:
1、实例化一个队列对象
2、调用队列对象相应的方法,实现增删改查等功能
队列接口:
public interface CustomList<E> {
/**
* 添加 E类型的数据到末尾
* @param e 要添加的值
*/
public void add(E e);
/**
* 获取指定位置的数据
* @param index 位置索引
* @return 返回索引位置的数据
*/
public E get(int index);
// /**
// * 添加到指定位置
// * @param e 要添加的值
// * @param index 位置索引
// */
// public void add(E e,int index);
/**
*
* @return 返回数组的长度
*/
public int getsize();
// /**
// * 删除索引位置的数据
// * @param index 索引位置
// */
// public void delete(int index);
}
队列接口实现类:
public class CustomListImp<E> implements CustomList<E>{
private Object[] array ;
private int size=0;
public CustomListImp(){
array = new Object[0];
}
public void add(E e) {
// 1、新建一个tarray数组
Object[] tarray = new Object[array.length+1];
// 2、将要加入的对象放入新数组的末尾
tarray[array.length] = e;
// 3、将原数组中的数据放到新数组中
for(int i=0;i<array.length;i++){
tarray[i] = array[i];
}
// 4、指向新数组
array=tarray;
// 5、数组长度加一
size++;
}
/**
* 取得队列中指定位置的对象,如果指定了类型,则转为指定类型返回
*/
public E get(int index) {
if(index<0||index>size-1){
return null;
}
else{
return (E)array[index];
}
}
/**
* 得到队列的长度
*/
public int getsize() {
return array.length;
}
}
分享到:
相关推荐
算法工程师的效率神器——vim篇.pdf
Android开发一大神器——Jsoup.pdf
算法工程师的效率神器——vim篇.pdf.rar
代码阅读神器——Sourceinsight4 适用C、C++、ASM、PAS、ASP、HTML等常用语言的阅读及编辑 功能强大,小巧方便,解压即用
安全检测及分析神器——AppScan10.0版本 window版本 web漏洞扫描 程序的漏洞扫描
Latex表格输入神器——Excel2Tex插件及教程 可以方便的将excel中的表格转入Latex中
通达信指标公式源码很准的抓妖神器——妖股起飞.doc
Windows全能终端神器——MobaXterm 主要功能: 支持各种连接SSH,X11,RDP,VNC,FTP,MOSH 支持Unix命令(bash,ls,cat,sed,grep,awk,rsync,…) 连接SSH终端后支持SFTP传输文件 各种丰富的插件(git/dig/...
Simatic控制系统智能神器——西门子全新TM NPU模块集成人工智能芯片.pdf
超级短线神器——钻石黄金柱指标(通达信 副图),准确率91.57%,价值.doc
电脑存储海量文件,利用Windows自带搜索工具难以胜任快速准确的搜索定位文件的任务,此软件克服诸多难题,实现了快速、准确地搜索定位文件。
功能强大,界面简单 瞬间帮你找到隐藏在电脑里犄角旮旯的各种文件
科研学术论文搜索工具,研究生的必备神器,大大提高工作学习效率。支持Sci-Hub、谷歌学术、知网、英文电子书、核心期刊、高质量翻译网站、专利标准查询等。
a、通过按钮或快捷键的方式对图片、表格及公式插入中文题注、英文题注或中英文双语(本硕博论文格式要求)题注,以Word中的域的方式生成相应的题注,题注编号会根据题注的删除和添加自动更新,无需逐一修改;...
微信公众号插件,可以进行文章、图片等信息采集,公众号排版神器。
支持复制 粘贴 拖拽 通过拖拽本地文件。或者对任意图片复制,在主窗口里ctrl+v就可以进行对本地文件的操作。 地址栏监听 地址栏监听,悬停链接或对地址进行复制或者拖拽,便可以对网页进行整页保存和色彩分析。...
两种格式的浪漫流星雨表白程序,一个是压缩包,解压后双击exe可以直接运行,另一个是打包好的安装程序,双击会安装程序并在桌面生成快捷方式,双击快捷方式即可运行。本资源学习自B站视频《C/C++表白项目:浪漫流星...
我们在开发手机版网页的时候,常常会出现下面的情景: (1) 开发时,在自己电脑上运行得好好的,在手机上打开就挂了,但是手机上又看不到error log; (2) 上线后,某用户表示页面失灵,但我们自己又重现不出来...
它的功能是把数据资料和数学函数转换为容易观察的平面或立体的图形,它有两种工作方式,交互式方式和批处理方式,它可以让使用者很容易地读入外部的数据结果,在屏幕上显示图形,并且可以选择和修改图形的画法,明显...
支持将ZIP/RAR/7Z隐藏到图片中,使用方法: 双击Jpg+FileBinder.exe 点击第一个按钮 “图像...选择伪装的图片 ...选择要伪装的ZIP/RAR/7Z ...选择伪装图片输出的位置以及名字 解压方法: 把后缀名改为 .7z 就看到压缩文件了