队列:它可以像数组一样有序的存放对象;但与数组最大的区别就是,它可以自动增长。

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

类名 [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;

}

//实现其他的方法

····

··

·

}

泛型:关键字

上述队列有一个缺点只能放入某个特定的类的对象,为了解决这个问题,我们可以使用“泛型”语法来解决这

个问题,简单的说,就是创建队列的时候,指定队列的中所存放的对象的类型。

1、自定义泛型队列接口的实现

public interface 接口名{

//向队列中加入对象

public void add(E e);

//去的队列指定位置的对象

public E get(int index);

//其他方法

。。。

}

2、实现的泛型队列

public class 队列名 implements 接口名{

//队列内部初始用来装对象的数组,长度为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

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类型的数据到末尾

* @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 implements CustomList{

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

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;

}

}

java队列存储_存储神器——队列相关推荐

  1. java抢单功能_基于消息队列的高并发抢单功能实现方法与流程

    本发明涉及嵌入式软件中间件,具体涉及一种基于消息队列的高并发抢单功能实现方法. 背景技术: 中间件是一种独立的系统软件或服务程序,分布式应用系统借助这种软件在不同的技术之间共享资源,管理计算资源和网络 ...

  2. java mq 积压_解决消息队列的数据积压只需这三招

    点击上方 "Java架构师社区"关注我们,设为星标 回复"架构师"获取资源 1 概述 最近生产环境的消息通知队列发生了大量的数据积压问题,从而影响到整个平台商户 ...

  3. java数据长度_存储单位(字节)

    所谓的占用字节数 就是申请内存的时候所占的空间大小记住一句话:计算机输入的符号最小1个字节,1字节 = 8bit (1bit就是二进制的1位) 8bit 表示的最大内存 等于 二进制的 1111-11 ...

  4. java memorystream 包_存储在MemoryStream中的裁剪图像中心

    我有一个图像上传表格,存储两种尺寸的图像:大图像和缩略图图像 . 对于缩略图图像,我试图从中心裁剪图像并重新调整大小为:30px x 30px . 这是我的代码: private static Bit ...

  5. java迷宫队列实现_迷宫问题--队列实现

    利用队列求解迷宫最短路径问题. 输入: 3 //代表迷宫行数 4 //代表迷宫列数 0 1 1 0 1 0 0 1 1 0 1 0 //代表迷宫 输出: 迷宫路径(用坐标点表示) 3 4 2 3 2 ...

  6. 用户请求队列化_分布式消息队列选型分析

    高并发架构是成为架构师的必修课,而消息队列,则是王冠上最闪亮的那颗明珠!能否驾驭消息队列这款高并发神器,亦成为架构师的试金石.本文将从队列本质.技术选型两个方面,给大家整理下个人心得,希望能对大家有所 ...

  7. Java实现队列 链式存储结构

    2019独角兽企业重金招聘Python工程师标准>>> 队列的链式存储结构 示例代码如下, package hash;/*** Created with IntelliJ IDEA. ...

  8. 队列链式存储 - Java实现

    队列链式存储结构实现 package com.kiger.Link;/*** @ClassName LinkQueue* @Description 链式队列实现* @Author zk_kiger* ...

  9. java栈和队列_栈和队列的面试题Java

    栈和队列: 面试的时候,栈和队列经常会成对出现来考察.本文包含栈和队列的如下考试内容: (1)栈的创建 (2)队列的创建 (3)两个栈实现一个队列 (4)两个队列实现一个栈 (5)设计含最小函数min ...

最新文章

  1. 敏捷团队迭代交付能力计算模型
  2. 用动图讲解分布式 Raft
  3. 获取运行中的TeamViewer的账号和密码--中文版
  4. jquery实现页面导航列表点击添加active样式
  5. 关于 Visual stdio 编译报错:error MSB6006: “CL.exe”已退出
  6. mysql单列去重复group by分组取每组前几条记录加order by排序
  7. C#文件和目录的操作
  8. Windows Insider 最新重大升级
  9. mac系统如何显示和隐藏文件
  10. 《百万IT毕业生的心声:IT专业大学生毕业前必做的十件事》
  11. jquery下载及怎么选择版本
  12. el-cascader级联选择器,解决最后一级空白过滤掉空的children,并且使用props设置children等参数
  13. Cantor 表 {C语言解法}
  14. 前端设计 响应式设计_响应设计简介
  15. excel打开提示不适合这台计算机,《win10提示excle安装》 win10 :Excel文件打不开、显示“此应用无法在你的电脑上运行”怎么办?...
  16. 网易java开发实习日记
  17. js实现div的碰壁反弹效果
  18. 如何让你的广告效果最好?CPC广告生存法则
  19. ArcGIS制图及出图小技巧——以土地利用图为例
  20. iOS蓝牙开发(三):iOS中蓝牙模块OTA升级(YModem协议)

热门文章

  1. 2020年,急需提及的十大最受欢迎的编程语言
  2. IRedMail个性化设置
  3. 2010经典爱情语句收集(转载)
  4. 跟我学c++高级篇——反射的基本实现方式
  5. 运维实践-最新Nginx二进制构建编译lua-nginx-module动态链接Lua脚本访问Redis数据库读取静态资源隐式展现...
  6. 【转】用阿里云搭建个人云盘
  7. 靶机渗透实战——SickOs1.2
  8. python城市提取_使用python从文本中提取城市名称
  9. java 结构体拷贝_对象拷贝 - 优雅的解决方案 Mapstruct
  10. php变量结构体的深入理解,第一节 变量的结构和类型