数组队列

  

                                                                          数组队列的一些知识 

 数组的优点和缺点
 数组有哪些优点
  线性结构的存储方式(连续存储空间)
  数据的读取速度快。
  
 数组有哪些缺点
  1.数组中只能存储一种数据类型。
  2.开辟的空间是固定的。

 2  数组队列的实现思路
 1.定义数组,数组名中存储的是什么?
  内存的首地址
 2.如果改变数组名中存储的地址,那么数组指向的内存空间是不是改变了?
  int [] array = new int[10];
  array = new int[11];
 
3.数组队列的实现步骤
 1.定义一个类,类中有两个属性:一个是数组,一个元素总数;
 2.定义构造方法,实例化数组对象;
 3.定义添加元素的方法
  1.建立一个新的数组,该数组的长度是元素总数的长度加1
  2.循环属性数组中的内容,存入到新数组中
  3.将要添加的元素放到新数组的最后一个位置
  4.元素总数要加1
  5.将新数组名中存储的地址给属性数组。
 4.定义删除元素的方法
 5.定义返回元素总数的方法
 6.定义一个方法用来获取指定索引位置的元素。

4.Java的泛型
 泛型是使用E来表示。
 E表示什么?
  表示的是存储的数据类型,E是没有确定的类型的
  E不是Java的任何一种数据类型,只是一个符号,可以用Java的任何一种
  引用数据类型来代入。
  E就是用来表示Java中的任意一种数据类型。
  
 Object是Java所有类的父类。

package Arraylist;

import java.util.Collection;

public interface MyArraylist<E> {
	
	public void add(E e);//添加元素的方法
	public boolean remove(int index);//移除元素的方法
	
	public int size();//获取数组队列的元素总数
	public E get(int index);//获取指定索引位置的元素
	public  boolean add1(E e);//将指定的元素添加到此列表的尾部。
	 public  boolean add(int index, E element);// 将指定的元素插入此列表中的指定位置。
	 public boolean addAll(Collection<? extends E> c) ;  //按照指定 collection 的迭代器所返回的元素顺序,将该 collection 中的所有元素添加到此列表的尾部。 
        
	public	void clear()  ;  //移除此列表中的所有元素           
	             
	public 	 int indexOf() ;  //    返回此列表中指定位置上的元素 
	public 	  boolean isEmpty() ;    //返回此列表中首次出现的指定元素的索引,或如果此列表不包含元素,则返回 -1。       
	public 	int lastIndexOf(Object o1);    //如果此列表中没有元素,则返回 true
	public 	E remove1(int index) ;   //     移除此列表中指定位置上的元素。 
	 public	boolean remove(Object o) ; //  移除此列表中首次出现的指定元素(如果存在)。 
	public	E set(int index, E element);// 用指定的元素替代此列表中指定位置上的元素。 
	    
	 
	
}

 

package Arraylist;







/**
 * 数组队列的测试demo类
 * 
 * @author lby
 * 
 */
public class MyArrayListDemo {

	public static void main(String[] args) {
		// 实例化一个数组队列对象。
		MyArraylist<Object> mal = new MyArrayListImpl<Object>();
		mal.add("字符串");// 向队列中添加元素
		for (int i = 0; i < 10; i++) {
			mal.add(i);//调用添加元素的方法
		}
		
		mal.add(new MyArrayListImpl<Object>());
		

		// 输出信息
		for (int i = 0; i < mal.size(); i++) {
			System.out.println(mal.get(i));
		}
		//调用删除的方法
		mal.remove(5);
		// 输出信息
		for (int i = 0; i < mal.size(); i++) {
			System.out.println(mal.get(i));
		}
		//调用指定位置添加对象的方法
		mal.add(3,"字符串");
		for (int i = 0; i < mal.size(); i++) {
			
			System.out.println(mal.get(i));
		
	}
	}

}

   

package Arraylist;

import java.util.Collection;



/**
 * 自定义的数组队里实现类,该类要实现MyArrayList接口
 * 
 * @author lby
 * 
 */
public  class MyArrayListImpl<E> implements MyArraylist<E> {

	// 声明一个原始数组对象,长度是0
	private Object[] array;
	// 声明一个存储数组中元素的总数变量
	private int size = 0;

	/**
	 * 构造方法
	 */
	public MyArrayListImpl() {
		array = new Object[0];
	}

	/**
	 * 构造方法
	 */
	public MyArrayListImpl(int size) {
		array = new Object[size];
	}

	/**
	 * 向队列的末尾添加元素
	 */
	public void add(E e) {
		// 定义一个新的数组,该数组的长度是原始数组的长度加1
		Object newarray[] = new Object[size + 1];
		// 将原始数组中的内容复制到newarray
		for (int i = 0; i < size; i++) {
			// 复制操作
			newarray[i] = array[i];
		}
		// 将新元素添加newarray数组的最后一个位置
		newarray[size] = e;
		// 统计元素个数的计数器要加1
		size++;
		// 交换地址
		array = newarray;
	}

	/**
	 * 从队列中移除指定索引位置的元素
	 */
	public boolean remove(int index) {
		// 定义一个新的数组,该数组的长度是原始数组的长度减1
		Object newarray[] = new Object[size - 1];
		// 判断index索引是否在范围之内
		if (index >= 0 && index < size){
			// 将原始数组中的内容复制到newarray
			for(int i=0;i<index;i++){
				// 复制操作
				newarray[i] = array[i];
			}
			for(int i=index+1;i<size;i++){
				// 复制操作
				newarray[i-1] = array[i];
			}
		}else{
			return false;
		}
		// 统计元素个数的计数器要减1
		size--;
		// 交换地址
		array = newarray;
		return true;
	}

	/**
	 * 获取数组队列中的元素总数
	 */
	public int size() {
		return array.length;
	}

	/**
	 * 获取数组队列中指定索引位置的元素
	 */
	public E get(int index) {
		// 判断index索引是否在范围之内
		if (index >= 0 && index < size){
			return (E)array[index];
		}
		return null;
	}

	//将指定的元素添加到此列表的尾部。
	public boolean add1(E e) {
		
		Object newarray[] = new Object[size + 1];
		// 将原始数组中的内容复制到newarray
		for (int i = 0; i < size; i++) {
			// 复制操作
			newarray[i] = array[i];
		}
		// 将新元素添加newarray数组的最后一个位置
		newarray[size] = e;
		// 统计元素个数的计数器要加1
		size++;
		// 交换地址
		array = newarray;
		return false;
	}

	// 将指定的元素插入此列表中的指定位置。
	public  boolean add(int index, E e) {
		
		Object [] obj=new Object[size+1];
		for(int i=0;i<index;i++)
		{
			System.out.println("hhih");
		obj[i]=array[i];
		}
		obj[index]=e;//添加新元素到指定位置
		for(int j=index;j<size;j++)//将后面的元素加进去
		{
			obj[j+1]=array[j];
			System.out.println("hhih");
		}
	array=obj;
		return false;
		
		
		
		
	}

	//按照指定 collection 的迭代器所返回的元素顺序,将该 collection 中的所有元素添加到此列表的尾部。 
	  
	public boolean addAll(Collection<? extends E> c) {
		
		return false;
	}

	 //移除此列表中的所有元素    
	public void clear() {
		
		Object[] obj=new Object[0];
		array=obj;
		
	}

	 //    返回此列表中指定位置上的元素 
	public int indexOf() {
		Object o1 = null;
		int length=array.length;
		for(int i=0;i<=length;i++)
		{
			if(array[i]==o1)
			return i;
		}
		return -1;
		
		
	}

	//返回此列表中首次出现的指定元素的索引,或如果此列表不包含元素,则返回 -1。
	public boolean isEmpty() {
		
		return size()==0;
	}

	 //如果此列表中没有元素,则返回 true
	public int lastIndexOf(Object o1) {
		int length=array.length;
		for(int i=length-1;i<=0;i--)
		{
			if(array[i]==o1)
			return i;
		}
		return -1;
	}

//  移除此列表中指定位置上的元素。 
	@SuppressWarnings("unchecked")
	public E remove1(int index) {
		int length=array.length;//设置数组的长度
		Object [] obj=new Object[length+1];//重新定义新的数组
		for(int i=0;i<index;i++)
		{
			
		obj[i]=array[i];//保留数组
		}
		
		for(int j=index+1;j<length+1;j++)
		{
			obj[j-1]=array[j];
		}
		array=obj;
		
		if(index>size||index<0)
		System.out.println("+index+"+index+size+",size");
		return (E)obj[index];
	}

//  移除此列表中首次出现的指定元素(如果存在)。
	public boolean remove(Object o1) {
		int length=array.length;
		for(int i=0;i<=length;i++)
		{
			if(array[i]==o1)
			return true;
		}
		return false;
		
		
	}

	// 用指定的元素替代此列表中指定位置上的元素
	public E set(int index, E e) {
		int length=array.length;
		Object [] obj=new Object[length+1];
		for(int i=0;i<index;i++)
		{
			
		obj[i]=array[i];
		}
		obj[index]=e;//添加指定的元素
		for(int j=index;j<length+1;j++)
		{
			obj[j]=array[j];
		}
		array=obj;
		
		if(index>size||index<0)
		System.out.println("+index+"+index+size+",size");
		return (E)obj[index];
	}

	
	

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值