`

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;
	}

}

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics