java数组队列

学习不久,理解不深。有错误之处还请指正。下面是我对java数组队列的理解。

什么是数组队列?

数组队列就是利用数组存储数据的属性来改变它只有固定长度的局限性,增加了一些删除,添加数据等功能,增加了其灵活性;

数组队列的实现

数组队列实现分为两部分:

1.数组队列接口

在数组队列接口中需要定义一些抽象方法,例如删除数据,添加数据,获取数据等方法

若你想存储多种类型的数据你可以使用泛型,泛型可以用来指任何类型的一种数据。下面的代码使用泛型编写的,以便于添加存储自己想要的类型数据。

接下来创建一个接口List<E>类,用来删除数据,添加数据,获取数据等等,下面是代码。

public interface List<E> {
public void add(E e);//向队列末尾添加一个元素
public boolean add(int index,E e);//向指定位置添加一个元素,添加成功返回true,添加失败返回false;
public E getE(int index);//获取指定位置的元素
public E remove(int index);//删除指位置的元素
public boolean remove(E e);//删除元素
public boolean update(int index,E e);//更新指定位置的元素
public boolean update(E e,E newValue);//更新某一个元素
public boolean removeall();//移除所有元素
public int size();//获取数组队列中元素个数的总数
}

 

2.数组队列类

在数组队列类中继承数组队列接口,然后要定义两个重要的属性,分别是数组长度length元素个数size;然后在重写接口中的所有方法就可以了,关键是写好添加,删除等方法;下面的代码使用泛型编写的,以便于添加存储自己想要的类型数据。

下面是数组队列类myArraysList<E>的代码

public class myArraysList<E> implements List<E>{
	private static int size=0;//定义数组队列中元素个数的初始值,为了在数组队列类中测试下面的方法是否正确,所以设置成静态
	private static int length=1;//记录数组初始长度,为了在数组队列类中测试下面的方法是否正确,所以设置成静态
	Object [] Array;//声明一个数组变量
	public myArraysList(int length){
		this.length=length;
		Array=new Object[length];//定义数组长度为length
	}
	@Override
	public void add(E e) {//向队列末尾添加一个元素
		// TODO Auto-generated method stub
		if(size<length){//元素个数小于数组长度就添加
			Array[size]=e;
			
		}
		else{
			Object[] Array1=new Object[length*2];//Array1指定义的一个新的数组
			for(int i=0;i<length;i++){
				Array1[i]=Array[i];
			}
			Array1[size]=e;
			Array=Array1;
			length=Array1.length;
		}
		size++;
	}

	@Override
	public boolean add(int index, E e) {//向指定位置添加一个元素,添加成功返回true,添加失败返回false;
		// TODO Auto-generated method stub
		if(index<0||index>=size){
			System.out.println("超过数组的size就不能添加");
			return false;
		}
		else{
			Object []Array1=new Object[size+1];//Array1指定义的一个新的数组
			for(int i=0;i<index;i++){
				Array1[i]=Array[i];
			}
			Array1[index]=e;//把要添加的元素加入指定位置
			for(int i=index;i<size;i++){
				Array1[i+1]=Array[i];
			}
			Array=Array1;
			length=Array1.length;
			size++;
		return true;
		}
		
	}

	@SuppressWarnings("unchecked")
	@Override
	public E getE(int index) {//获取指定位置的元素
		// TODO Auto-generated method stub
		if(index<0||index>=size){
			return null;
		}
		else{
		return (E)Array[index];
		}
	}

	@Override
	public E remove(int index) {//删除指位置的元素
		// TODO Auto-generated method stub
		if(index<0||index>=size){
			System.out.println("超过数组的size就不能删除");
		}
		else{
			Array[index]=null;
			for(int i=index;i<size-1;i++){
				Array[i]=Array[i+1];
			}
			size--;
		}
		return null;
	}

	@Override
	public boolean remove(E e) {//删除元素
		// TODO Auto-generated method stub
		for(int i=0;i<size;i++){
			if(Array[i]==e){
				Array[i]=null;
				for(int j=i;j<size-1;j++){
					Array[j]=Array[j+1];
				}
				size--;
			}
		}
		return true;
	}

	@Override
	public boolean update(int index, E e) {//更新指定位置的元素
		// TODO Auto-generated method stub
		if(index>=0&&index<size){
			Array[index]=e;
			}	
		return true;
	}

	@Override
	public boolean update(E e, E newValue) {//更新某一个元素
		// TODO Auto-generated method stub
		for(int i=0;i<size;i++){
			if(Array[i]==e){
				Array[i]=newValue;
			}
		}
		return true;
	}

	@Override
	public boolean removeall() {//移除所有元素
		// TODO Auto-generated method stub
		Object []Array1=new Object[0];
		Array=Array1;
		if(Array.length ==0)
			return true;
		else
			return false;
	}

	@Override
	public int size() {//获取数组队列中元素个数的总数
		// TODO Auto-generated method stub
		return size;
	}
	public static void main(String [] args){//这里主函数是为了测试上式方法的正确性
		myArraysList<String> mylist=new myArraysList<String>(length);//创建数组队列对象myArraysList
		mylist.add("wo");
		mylist.add("xihuan");
		mylist.add("ni");
		mylist.add(2, "you");
		
		for(int i=0;i<size;i++){
			Object e=mylist.getE(i);
			System.out.println("得到的元素是:"+e);
		}
		mylist.remove("you");
		mylist.update(2, "i");
		//mylist.removeall();
		for(int i=0;i<size;i++){
			Object e=mylist.getE(i);
			System.out.println("得到的元素是:"+e);
		}
	}
}

参考:https://blog.csdn.net/weixin_42621338/article/details/82080167

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值