由于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; } }
相关推荐
在Java中,我们可以使用数组来实现优先队列。这篇文章将探讨如何利用数组实现优先队列,并通过提供的`PriorityQ.java`文件来深入理解其实现原理。 1. **优先队列基本概念** 优先队列是一种数据结构,它维护了一个...
本文将深入探讨这两个概念,并结合给定的`Array.java`文件,分析其可能包含的Java数组和队列的实现。 首先,数组是最基本的数据结构之一,它允许存储固定数量相同类型的数据。在Java中,数组通过`[]`符号定义,例如...
普通队列 1)将尾指针往后移:rear+1,当front==rear【空】 2)若尾指针rear小于队列的最大下标maxSize-1,则将数据存入rear所指的数中组元素... 5)当我们这样分析,队列中有效的数据的个数(rear+maxSize-front)%maxSize
在循环队列中,队头和队尾可以循环地指向数组的任意位置,从而实现了高效的操作。 首先,我们需要定义一个`QueueArray`类,这个类将包含队列的基本操作,如入队(enqueue)、出队(dequeue)、检查队头元素(front...
Java数组是Java编程语言中的基本数据结构之一,它允许我们存储多个同类型的元素在一个单一的变量中。数组的使用在程序设计中至关重要,因为它提供了一种高效、有序的方式来管理和访问数据。下面将深入探讨Java数组的...
Java数组队列是一种基于数组实现的线性数据结构,它遵循先进先出(FIFO,First In First Out)的原则。在Java中,数组队列通常用于处理数据的顺序处理,例如任务调度、消息传递等场景。以下是关于Java数组队列的一些...
数据结构学习-Java使用数组实现简单的队列操作SimpleQueue,简单易懂,适合初学者。
在普通数组队列中,一旦队列满或空,需要进行数组的重新分配,而循环队列则避免了这个过程,提升了性能。 在编程语言中,如C、C++、Java或Python,我们可以用不同的方式实现数组循环队列。例如,在C++中,可以定义...
现在,你已经掌握了使用Java数组进行排序和动态插入元素的基本知识。在实际编程时,可以结合这些概念完成题目所要求的大作业。当然,具体实现还需要考虑到错误处理、用户输入验证等细节,以确保程序的健壮性和用户...
在上面的代码中,我们使用一个数组 `array` 来存储队列中的元素,并使用 `head` 变量来记录队列的头部元素的索引,使用 `trail` 变量来记录队列的尾部元素的索引,使用 `count` 变量来记录队列中的元素个数。...
队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,只允许在表的后端(rear)进行插入操作,下面介绍一下java使用数组和链表实现队列的示例
java数组实现循环队列。包括入队, 出队,输出队列。 队列先入先出。
本篇将深入探讨Java数组的相关知识点,并通过实际的例子代码来加深理解。 1. **数组的声明与初始化** 在Java中,我们可以声明一个数组并同时初始化它。例如,创建一个包含5个整数的数组: ```java int[] ...
基于Java数组实现循环队列的两种方法小结 本文讲解了基于Java数组实现循环队列的两种方法,旨在帮助读者更好地理解循环队列的实现机理和设计思想。循环队列是一种特殊的队列结构,能够充分利用数组的存储空间,避免...
在循环队列中,当队列满时,不是停止插入,而是重新从队列的起始位置开始,形成一种循环的效果。在Java中,可以使用数组配合索引来模拟循环队列。需要注意的是,循环队列需要处理两种特殊状态:空队列和满队列。判断...
在Java中,数组是一种存储固定数量同类型元素的数据结构。对于二维数组,它可以被看作是多个一维数组的集合,常用于构建网格或矩阵,如迷宫的平面布局。每个元素的位置可以用行和列的索引来标识,例如,`array[i][j]...
本资源提供了Java实现的数据结构代码,包括栈、动态数组、队列、链表和二叉树,这些都是计算机科学中最基础且重要的数据结构。 1. **栈(Stack)**:栈是一种“后进先出”(LIFO)的数据结构,常用于表达式求值、...
Java 数组是编程中最基本的数据结构之一,它允许存储固定数量的同类型元素...这些知识点涵盖了Java数组的基本操作,包括创建、初始化、访问、复制和异常处理等方面。理解并熟练掌握这些内容对于编写Java程序至关重要。
相比于普通数组队列,环形队列具有更好的空间利用率,因为它可以避免数组两端扩展带来的开销。在Java中,我们可以使用数组或者链表来实现环形队列,但通常数组更常见,因为其在内存分配和访问上的优势。 创建环形...