`

队列 java中的拟动态数组

    博客分类:
  • JAVA
阅读更多

                                                             队列

      用惯了数组的同学可能会思考一个问题:“有没有比数组更方便的方法,可以任意添加元素,而不浪费空间,相信许多学过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();
		
		
	}



}

 

分享到:
评论

相关推荐

    用数组实现的优先队列(JAVA)

    - 其他辅助方法:如`swap(int i, int j)`用于交换数组中的元素,`upHeap()`和`downHeap()`分别用于上浮和下沉操作。 4. **核心算法** - **上浮操作**:当新元素插入后,需要从下往上遍历,直到找到合适的位置,...

    用数组实现的循环队列(java)

    本篇文章将探讨如何在Java中使用数组实现一个循环队列,通过阅读《用数组实现的循环队列(java)》这篇博文,我们可以深入理解循环队列的工作原理以及其在实际编程中的应用。 循环队列是队列的一种变体,它巧妙地...

    java大作业用数组进行队列排序

    现在,你已经掌握了使用Java数组进行排序和动态插入元素的基本知识。在实际编程时,可以结合这些概念完成题目所要求的大作业。当然,具体实现还需要考虑到错误处理、用户输入验证等细节,以确保程序的健壮性和用户...

    Java中什么是数组共2页.pdf.zip

    3. 访问元素:通过索引来访问数组中的元素,索引从0开始。如`numbers[0]`表示第一个元素,`numbers[4]`是最后一个元素。 4. 遍历:使用for循环遍历数组中的所有元素是常见的操作。例如: ```java for (int i = 0; ...

    Java版数据结构代码,栈,动态数组,队列,链表,二叉树

    本资源提供了Java实现的数据结构代码,包括栈、动态数组、队列、链表和二叉树,这些都是计算机科学中最基础且重要的数据结构。 1. **栈(Stack)**:栈是一种“后进先出”(LIFO)的数据结构,常用于表达式求值、...

    同步java之数组与队列

    本文将深入探讨这两个概念,并结合给定的`Array.java`文件,分析其可能包含的Java数组和队列的实现。 首先,数组是最基本的数据结构之一,它允许存储固定数量相同类型的数据。在Java中,数组通过`[]`符号定义,例如...

    java 将二维数组顺时针,逆时针排序

    在Java编程中,二维数组是一种常见的数据结构,用于表示矩阵或棋盘等二维空间的数据。在某些场景下,我们可能需要对二维数组进行特定的排序,例如顺时针排序或逆时针排序。顺时针排序意味着从数组的左上角开始,沿着...

    基于JAVA实现的常用数据结构代码,JAVA实现复杂度、动态数组、链表、栈、队列、二叉搜索树等

    本压缩包"基于JAVA实现的常用数据结构代码"包含了多个关键的数据结构实现,包括复杂度分析、动态数组、链表、栈、队列以及二叉搜索树。以下是这些数据结构的详细说明: 1. **复杂度**:在计算机科学中,复杂度分为...

    Java中一维数组.pdf

    在Java编程语言中,一维数组是数据结构的基础,它是一个有序数据的集合,其中的每个元素都通过相同的数组名和一个独特的下标来标识。一维数组在Java中被视为特殊的变量类型,允许程序员存储同一类型的数据序列。下面...

    java数组_java_java数组_

    Java数组是Java编程语言中的基本数据结构之一,它允许我们存储多个同类型的元素在一个单一的变量中。数组的使用在程序设计中至关重要,因为它提供了一种高效、有序的方式来管理和访问数据。下面将深入探讨Java数组的...

    java实现队列(数组结构)(csdn)————程序.pdf

    在这个Java程序中,我们看到了如何使用数组实现一个循环队列(CricleArrayQueue)。循环队列是一种特殊的线性数据结构,它通过在数组末尾与开头相连形成一个逻辑上的环形空间,解决了普通数组作为队列时可能出现的...

    JAVA迷宫,JAVA语言,数组

    在Java中,数组是一种存储固定数量同类型元素的数据结构。对于二维数组,它可以被看作是多个一维数组的集合,常用于构建网格或矩阵,如迷宫的平面布局。每个元素的位置可以用行和列的索引来标识,例如,`array[i][j]...

    java算法题 : 数组相关问题

    4. 查找数组中的重复元素:如果数组中某个元素出现了超过一次,如何找到这个元素?可以使用布隆过滤器或者哈希表来辅助查找。 六、多维数组 Java支持多维数组,如二维数组,可以看作是数组的数组。例如,int[][] ...

    java中链表和数组的区别? (1) 数组和链表.pdf

    这意味着你可以通过下标直接访问数组中的任一元素,时间复杂度为O(1)。然而,数组在创建时就需要确定大小,并且一旦定义,大小就不能改变。如果需要插入或删除元素,数组需要移动大量的元素,导致插入和删除操作的...

    java队列实现(顺序队列、链式队列、循环队列)

    在Java中,可以使用数组配合索引来模拟循环队列。需要注意的是,循环队列需要处理两种特殊状态:空队列和满队列。判断队列是否为空,通常看队首和队尾是否指向同一位置;判断队列是否已满,需要考虑数组大小和队列...

    Java数组相关的例子代码

    通过索引来访问数组中的元素,索引从0开始。例如,访问数组的第一个元素(索引0): ```java System.out.println(numbers[0]); // 输出:1 ``` 3. **遍历数组** 我们可以使用for循环遍历数组的所有元素: `...

    Java-用数组实现栈-队列-线性列表

    Java 数组实现栈、队列和线性列表 Java 是一种广泛使用的编程语言...数组是 Java 中的一种基本数据结构,可以用来实现栈、队列和线性列表等数据结构。在实际开发中,数组可以用来实现各种数据结构,以满足不同的需求。

    java编程基础—数组练习.pdf

    在Java编程中,数组是一种非常基础且重要的数据结构,它允许我们存储同类型的多个数据项。数组的概念在上述的几个课后题目中被反复强调,包括数组的定义、创建、初始化、复制、排序以及多维数组的操作。接下来,我们...

    数组实现循环队列

    java数组实现循环队列。包括入队, 出队,输出队列。 队列先入先出。

Global site tag (gtag.js) - Google Analytics