由于Java中没有像c中的链表的结构,所以当我们要动态的添加数组的元素,就有了数组队列的概念,而c中对于没有用的数组,有析构函数进行内存空间的回收,而Java则有自己的回收机制——垃圾回收机制,用于自动销毁没有使用的对象,释放内存空间。
数组队列可以实现简单的增,删,查,找功能,当然在JKD中还有一些方法,下文中我会附上我重写的源代码。
一.数组队列的实现步骤
1.定义一个接口,在接口中定义抽象方法
2.定义一个类,实现接口中的方法,并定义初始数组以及数组长度
3.添加元素
1.新建一个数组,长度为原长度+1
2.将原数组的内容循环赋值给新数组
3.将添加的元素添加到新数组的末尾
4.将新数组的地址赋值给原数组
4.删除元素
1.新建一个数组,长度为原长度-1
2.将原数组的内容循环赋值给新数组
3.将新数组的地址赋值给原数组
5.获取数组的长度
1.在添加元素时,数组长度++,
2.在删除元素时,数组长度--,
3.用一个方法返回数组的长度
6.查找数组
1.是否越界
2.用数组下表查找
由于在实际编程时,对于不同内容我们需要不同的类型参数以及变量,但如果不同变量我们又重写一个方法,可能有点过于繁琐,所以我们用泛型来解决这个问题。
二.泛型
1.泛型:符号E
2.可以是任意一种数据类型,一般我们在实例化一个对象是用
类< 实际用到的类型> 对象名 = new 类< 实际用到的类型> ();
的方法来定义一个泛型的对象。
下面是我在查找Java中的JDK里数组队列中的部分方法的实现
import java.util.Collection; public class ArrayImp<E> implements ArrayInter<E>{ public Object []array = new Object[0]; public int size = 0; // 将指定的元素添加到此列队的尾部 public boolean add(E e) { // TODO Auto-generated method stub Object []arraynew = new Object[array.length+1]; for(int i=0;i<array.length;i++){ arraynew[i] = array[i]; } arraynew[array.length] = e; size++; array = arraynew; return false; } //将制定的元素插入此列表中的指定位置 public void add(int index, E element) { // TODO Auto-generated method stub Object []arraynew = new Object[array.length+1]; for(int i=index;i<array.length+1;i++){ arraynew[i] = array[i-1]; } for(int j=0;j<index;j++){ arraynew[j]=array[j]; } size++; arraynew[index-1] = element; array = arraynew; } //按照指定collection中的所有元素添加到此列表的尾部 public void addAll(ArrayInter<E> c) { int s = c.size(); size = s+size; Object []ar = new Object[size]; for(int i=s,j=0;j<s;i++,j++){ ar[i] = c.get(j); } for(int j=0;j<s;j++){ ar[j]=array[j]; } array = ar; } //移除此列表中的所有元素 public void clear() { // TODO Auto-generated method stub array = new ArrayImp[0]; size=0; } //返回此列表中指定位置上的元素 public E get(int index) { // TODO Auto-generated method stub if(index>=0&&index<size){ return (E)array[index]; //强制转换成E类型 } return null; } //返回此列表中首次出现的指定元素的索引,或者如果此列表不包含元素,则返回-1 public int indexOf(Object o) { // TODO Auto-generated method stub for(int i=0;i<size;i++){ if(array[i]==o){ return i+1; } } return -1; } //如果此列表中没有元素,则返回true public boolean isEmpty() { // TODO Auto-generated method stub if(size==0) return true; return false; } //返回此列表中最后一次出现的指定元素的索引,或者如果此列表不包含索引,则返回-1 public int lastIndexOf(Object o) { // TODO Auto-generated method stub for(int i=size-1;i>=0;i--){ if(array[i]==o){ return i+1; } } return -1; } //移除此列表中指定位置上的元素 public E remove(int index) { // TODO Auto-generated method stub Object []arraynew = new Object[array.length-1]; for(int j=0;j<index;j++){ arraynew[j]=array[j]; } for(int i=index;i<size;i++){ arraynew[i-1]=array[i]; } array=arraynew; size--; return null; } //移除此列表中首次出现的指定元素 public boolean remove(Object o) { // TODO Auto-generated method stub Object []arraynew = new Object[array.length-1]; for(int k=0;k<size;k++){ if(o==array[k]){ for(int j=0;j<k;j++){ arraynew[j]=array[j]; } for(int i=k;i<size;i++){ arraynew[i]=array[i]; } array=arraynew; size--; } } return false; } //有指定的元素替代此列表中指定位置上的元素 public E set(int index, E element) { // TODO Auto-generated method stub array[index-1]=element; return null; } //返回此列表中元素的大小 public int size() { // TODO Auto-generated method stub return size; } @Override public boolean addAll(Collection<? extends E> c) { // TODO Auto-generated method stub return false; } }
相关推荐
NULL 博文链接:https://128kj.iteye.com/blog/1665616
普通队列 1)将尾指针往后移:rear+1,当front==rear【空】 2)若尾指针rear小于队列的最大下标maxSize-1,则将数据存入rear所指的数中组元素... 5)当我们这样分析,队列中有效的数据的个数(rear+maxSize-front)%maxSize
NULL 博文链接:https://shxin.iteye.com/blog/1948849
主要介绍了Java数组队列概念与用法,结合实例形式分析了Java数组队列相关概念、原理、用法及操作注意事项,需要的朋友可以参考下
NULL 博文链接:https://128kj.iteye.com/blog/1624362
队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,只允许在表的后端(rear)进行插入操作,下面介绍一下java使用数组和链表实现队列的示例
java数组实现循环队列。包括入队, 出队,输出队列。 队列先入先出。
Java-用数组实现栈-队列-线性列表(最详细) 有注释 适合java新生 进行数组的练习 3个数据结构的数组实现练习
主要介绍了java数组实现队列及环形队列实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
1) 初始化含有20个英文名字的数组; 2) 排序:以a-z,A-Z的升序顺序; 3) 输入任意一个名字并能将其插入到合适的位置。
队列,包含了数组队列,环形队列,在队列中,使用很多问题,得到了很多好的应用,对于后面集中地应用有好处
在队列的代码中,引用了链表的代码
下面小编就为大家带来一篇Java用数组实现循环队列的示例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
下面小编就为大家分享一篇基于Java数组实现循环队列的两种方法小结,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
java双端队列的实现-Java实现自定义双端队列(链表和数组两种方式) 数组和链表.pdf
Java数据结构对象数组,数组堆栈,数组队列,SLL,动态堆栈和队列,DLL,BST,对象的BST,顺序文件,流,直接访问文件(随机访问文件)
java实现队列(数组结构)(csdn)————程序
主要介绍了Java数组模拟优先级队列数据结构的实例,优先级队列中的元素会被设置优先权,本文的例子借助了Java中的TreeSet和TreeMap,需要的朋友可以参考下
java利用数组求平均值,最大值,最小值。需要的朋友可以过来参考下,希望对大家有所帮助