队列
用惯了数组的同学可能会思考一个问题:“有没有比数组更方便的方法,可以任意添加元素,而不浪费空间,相信许多学过C++的同学会立马知道,动态数组,然而java没有指针,所以也就没有动态数组,这时候怎么办呢?对了,队列,java中的神器,听起来十分高大上,然而学了它的人都知道,它不过是数组的拓展,实现起来非常简单,虽然java中实际上是有系统定义的ArrayList,可以直接实现,加入元素,删除,等多种功能,但是为了真正理解以及运用队列,下面是队列实现的代码,以及方法:
步骤:
数组队列的实现步骤
1.定义一个接口,在接口中定义抽象方法。
2.定义一个类,实现接口,重写接口中的抽象方法。
3.在类中定义一个原始数组和数组的元素总数属性。
4.实现添加元素的方法
以下是接口代码:
import java.util.Collection; public interface ArrayList<E> extends Collection<E>{ public boolean add(E e);//定义添加数据的方法 public boolean remove(int index);//定义删除数据的方法 public int getsize();//获取队列长度 public E gete(int index);//获取指定索引位置的元素 public void clear(); // 移除此列表中的所有元素 public int indexOf(Object o); // 返回此列表中首次出现的指定元素的索引,或如果此列表不包含元素,则返回 -1。 public boolean isEmpty(); // 如果此列表中没有元素,则返回 true public int lastIndexOf(Object o); //返回此列表中最后一次出现的指定元素的索引,或如果此列表不包含索引,则返回 -1。 public boolean remove(Object o); // 移除此列表中首次出现的指定元素(如果存在)。 public E set(int index, E element); //用指定的元素替代此列表中指定位置上的元素。 public void print(); //打印数组 public boolean addAll(Collection c); }
重点:我们在另一个类中继承接口,实现其所有抽象方法,这一段十分重要,能深刻理解队列实现原理
代码如下:
import java.util.Collection; import java.util.Iterator; public class ArrayFunction<E> implements ArrayList{ public Object[] array; public int size=0; public ArrayFunction(){ array=new Object[10]; } //定义添加元素的方法 public boolean add(Object e) { Object newarray[]=new Object[size+1];//定义一个新数组长度是原数组加1 //遍历将旧数组的值赋给新数组 for(int i=0;i<size;i++){ newarray[i]=array[i]; } //将最后一个加入的元素加到新数组最后一个 newarray[size]=e; size++; array=newarray; //交换地址 return true; } //定义移除指定位置的元素方法 public boolean remove(int index) { Object newarray[]=new Object[size-1];//定义新数组元素长度比原来少一 //判断是否越界 if(index<0&&index>size){ return false; } else{ for(int i=0;i<index;i++){ newarray[i]=array[i]; } for(int i=index+1;i<size;i++){ newarray[i-1]=array[i]; } } size--; array=newarray; return true; } public boolean addAll(Collection c) { int length=c.size(); Object [] newarray=new Object[size+length];//创建一个新数组 if(length!=0) { //循环遍历数组 for(int i=0;i<size;i++) { newarray[i]=array[i]; } for(int i=0;i<length;i++) { Iterator it=c.iterator(); if(it.hasNext()){ newarray[size+i]=it.next(); } } array=newarray;//交换地址 return true; } else { return false; } } //得到数组长度 public int getsize() { // TODO Auto-generated method stub return size; } //得到指定位置的数组元素 public E gete(int index) { return (E) array[index]; } //清除功能,本来想将array中所有元素全部赋值为null,考虑到String类型不同,因此使用下面方法 public void clear() { Object[] newarray=new Object[size]; array=newarray; } // 返回此列表中首次出现的指定元素的索引,或如果此列表不包含元素,则返回 -1。 public int indexOf(Object o) { for(int i=0;i<size;i++){ if(array[i]==o){ return i; } } return -1; } //判断数组是否为空 public boolean isEmpty() { for(int i=0;i<size;i++){ if(array[i]!=null){ return true; } } return false; } //检索元素最后一次出现的地点,或如果此列表不包含元素,则返回 -1。 public int lastIndexOf(Object o) { int last=0,cout=0; for(int i=0;i<size;i++){ if(array[i]==o){ last=i; cout++; } } if(cout!=0) return last; else return -1; } // 移除此列表中首次出现的指定元素(如果存在)。 public boolean remove(Object o) { Object newarray[]=new Object[size-1]; for(int i=0;i<size;i++){ if(array[i]==o){ remove(i);//嵌套使用 return true; } } return false; } @Override public Object set(int index, Object element) { array[index]=element; return null; } @Override public void print() { System.out.println(""); for (int i = 0; i <size; i++) { System.out.print(array[i]+"\t"); } } @Override public int size() { // TODO Auto-generated method stub return 0; } @Override public boolean contains(Object o) { // TODO Auto-generated method stub return false; } @Override public Iterator iterator() { // TODO Auto-generated method stub return null; } @Override public Object[] toArray() { // TODO Auto-generated method stub return null; } @Override public Object[] toArray(Object[] a) { // TODO Auto-generated method stub return null; } @Override public boolean containsAll(Collection c) { // TODO Auto-generated method stub return false; } @Override public boolean removeAll(Collection c) { // TODO Auto-generated method stub return false; } @Override public boolean retainAll(Collection c) { // TODO Auto-generated method stub return false; } }
之后,就是定义数组去实现验证以上的代码效果了。我们在建立一个Arrayset类去实现
import java.util.Collection; import java.util.List; public class Arrayset { public static void main(String[] args) { // 实例化一个数组队列对象。 ArrayList a = new ArrayFunction(); a.add("依依");// 向队列中添加元素 for (int i = 0; i < 10; i++) { a.add(i);//调用添加元素的方法 } a.print();//打印数组 a.add(new ArrayFunction());//设置数组长度 Collection b = new ArrayFunction(); b.add("343"); a.addAll(b); //调用删除的方法 a.remove(5); // 输出信息 a.print(); a.getsize(); System.out.println(a.getsize()); a.gete(3); System.out.println(a.gete(3)); a.indexOf("依依"); System.out.println(a.indexOf("依依")); a.lastIndexOf(7); System.out.println(a.lastIndexOf(7)); a.isEmpty(); System.out.println( a.isEmpty()); a.set(2,"LOVE"); a.print(); a.clear(); a.print(); } }
相关推荐
- 其他辅助方法:如`swap(int i, int j)`用于交换数组中的元素,`upHeap()`和`downHeap()`分别用于上浮和下沉操作。 4. **核心算法** - **上浮操作**:当新元素插入后,需要从下往上遍历,直到找到合适的位置,...
本篇文章将探讨如何在Java中使用数组实现一个循环队列,通过阅读《用数组实现的循环队列(java)》这篇博文,我们可以深入理解循环队列的工作原理以及其在实际编程中的应用。 循环队列是队列的一种变体,它巧妙地...
现在,你已经掌握了使用Java数组进行排序和动态插入元素的基本知识。在实际编程时,可以结合这些概念完成题目所要求的大作业。当然,具体实现还需要考虑到错误处理、用户输入验证等细节,以确保程序的健壮性和用户...
3. 访问元素:通过索引来访问数组中的元素,索引从0开始。如`numbers[0]`表示第一个元素,`numbers[4]`是最后一个元素。 4. 遍历:使用for循环遍历数组中的所有元素是常见的操作。例如: ```java for (int i = 0; ...
本资源提供了Java实现的数据结构代码,包括栈、动态数组、队列、链表和二叉树,这些都是计算机科学中最基础且重要的数据结构。 1. **栈(Stack)**:栈是一种“后进先出”(LIFO)的数据结构,常用于表达式求值、...
本文将深入探讨这两个概念,并结合给定的`Array.java`文件,分析其可能包含的Java数组和队列的实现。 首先,数组是最基本的数据结构之一,它允许存储固定数量相同类型的数据。在Java中,数组通过`[]`符号定义,例如...
在Java编程中,二维数组是一种常见的数据结构,用于表示矩阵或棋盘等二维空间的数据。在某些场景下,我们可能需要对二维数组进行特定的排序,例如顺时针排序或逆时针排序。顺时针排序意味着从数组的左上角开始,沿着...
本压缩包"基于JAVA实现的常用数据结构代码"包含了多个关键的数据结构实现,包括复杂度分析、动态数组、链表、栈、队列以及二叉搜索树。以下是这些数据结构的详细说明: 1. **复杂度**:在计算机科学中,复杂度分为...
在Java编程语言中,一维数组是数据结构的基础,它是一个有序数据的集合,其中的每个元素都通过相同的数组名和一个独特的下标来标识。一维数组在Java中被视为特殊的变量类型,允许程序员存储同一类型的数据序列。下面...
Java数组是Java编程语言中的基本数据结构之一,它允许我们存储多个同类型的元素在一个单一的变量中。数组的使用在程序设计中至关重要,因为它提供了一种高效、有序的方式来管理和访问数据。下面将深入探讨Java数组的...
在这个Java程序中,我们看到了如何使用数组实现一个循环队列(CricleArrayQueue)。循环队列是一种特殊的线性数据结构,它通过在数组末尾与开头相连形成一个逻辑上的环形空间,解决了普通数组作为队列时可能出现的...
在Java中,数组是一种存储固定数量同类型元素的数据结构。对于二维数组,它可以被看作是多个一维数组的集合,常用于构建网格或矩阵,如迷宫的平面布局。每个元素的位置可以用行和列的索引来标识,例如,`array[i][j]...
4. 查找数组中的重复元素:如果数组中某个元素出现了超过一次,如何找到这个元素?可以使用布隆过滤器或者哈希表来辅助查找。 六、多维数组 Java支持多维数组,如二维数组,可以看作是数组的数组。例如,int[][] ...
这意味着你可以通过下标直接访问数组中的任一元素,时间复杂度为O(1)。然而,数组在创建时就需要确定大小,并且一旦定义,大小就不能改变。如果需要插入或删除元素,数组需要移动大量的元素,导致插入和删除操作的...
在Java中,可以使用数组配合索引来模拟循环队列。需要注意的是,循环队列需要处理两种特殊状态:空队列和满队列。判断队列是否为空,通常看队首和队尾是否指向同一位置;判断队列是否已满,需要考虑数组大小和队列...
通过索引来访问数组中的元素,索引从0开始。例如,访问数组的第一个元素(索引0): ```java System.out.println(numbers[0]); // 输出:1 ``` 3. **遍历数组** 我们可以使用for循环遍历数组的所有元素: `...
Java 数组实现栈、队列和线性列表 Java 是一种广泛使用的编程语言...数组是 Java 中的一种基本数据结构,可以用来实现栈、队列和线性列表等数据结构。在实际开发中,数组可以用来实现各种数据结构,以满足不同的需求。
在Java编程中,数组是一种非常基础且重要的数据结构,它允许我们存储同类型的多个数据项。数组的概念在上述的几个课后题目中被反复强调,包括数组的定义、创建、初始化、复制、排序以及多维数组的操作。接下来,我们...
java数组实现循环队列。包括入队, 出队,输出队列。 队列先入先出。