`

Java中的数组队列

 
阅读更多

        由于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)

    在Java中,我们可以使用数组来实现优先队列。这篇文章将探讨如何利用数组实现优先队列,并通过提供的`PriorityQ.java`文件来深入理解其实现原理。 1. **优先队列基本概念** 优先队列是一种数据结构,它维护了一个...

    同步java之数组与队列

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

    数组队列学习代码:队列和环形队列

    普通队列 1)将尾指针往后移:rear+1,当front==rear【空】 2)若尾指针rear小于队列的最大下标maxSize-1,则将数据存入rear所指的数中组元素... 5)当我们这样分析,队列中有效的数据的个数(rear+maxSize-front)%maxSize

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

    在循环队列中,队头和队尾可以循环地指向数组的任意位置,从而实现了高效的操作。 首先,我们需要定义一个`QueueArray`类,这个类将包含队列的基本操作,如入队(enqueue)、出队(dequeue)、检查队头元素(front...

    java数组_java_java数组_

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

    Java数组队列概念与用法实例分析

    Java数组队列是一种基于数组实现的线性数据结构,它遵循先进先出(FIFO,First In First Out)的原则。在Java中,数组队列通常用于处理数据的顺序处理,例如任务调度、消息传递等场景。以下是关于Java数组队列的一些...

    Java使用数组实现简单的队列操作SimpleQueue

    数据结构学习-Java使用数组实现简单的队列操作SimpleQueue,简单易懂,适合初学者。

    数组循环队列.rar

    在普通数组队列中,一旦队列满或空,需要进行数组的重新分配,而循环队列则避免了这个过程,提升了性能。 在编程语言中,如C、C++、Java或Python,我们可以用不同的方式实现数组循环队列。例如,在C++中,可以定义...

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

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

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

    在上面的代码中,我们使用一个数组 `array` 来存储队列中的元素,并使用 `head` 变量来记录队列的头部元素的索引,使用 `trail` 变量来记录队列的尾部元素的索引,使用 `count` 变量来记录队列中的元素个数。...

    java使用数组和链表实现队列示例

    队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,只允许在表的后端(rear)进行插入操作,下面介绍一下java使用数组和链表实现队列的示例

    数组实现循环队列

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

    Java数组相关的例子代码

    本篇将深入探讨Java数组的相关知识点,并通过实际的例子代码来加深理解。 1. **数组的声明与初始化** 在Java中,我们可以声明一个数组并同时初始化它。例如,创建一个包含5个整数的数组: ```java int[] ...

    基于Java数组实现循环队列的两种方法小结

    基于Java数组实现循环队列的两种方法小结 本文讲解了基于Java数组实现循环队列的两种方法,旨在帮助读者更好地理解循环队列的实现机理和设计思想。循环队列是一种特殊的队列结构,能够充分利用数组的存储空间,避免...

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

    在循环队列中,当队列满时,不是停止插入,而是重新从队列的起始位置开始,形成一种循环的效果。在Java中,可以使用数组配合索引来模拟循环队列。需要注意的是,循环队列需要处理两种特殊状态:空队列和满队列。判断...

    JAVA迷宫,JAVA语言,数组

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

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

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

    Java_数组练习题目1

    Java 数组是编程中最基本的数据结构之一,它允许存储固定数量的同类型元素...这些知识点涵盖了Java数组的基本操作,包括创建、初始化、访问、复制和异常处理等方面。理解并熟练掌握这些内容对于编写Java程序至关重要。

    Part03Queue_java_环形队列_bearqu5_

    相比于普通数组队列,环形队列具有更好的空间利用率,因为它可以避免数组两端扩展带来的开销。在Java中,我们可以使用数组或者链表来实现环形队列,但通常数组更常见,因为其在内存分配和访问上的优势。 创建环形...

Global site tag (gtag.js) - Google Analytics