自定义的ArrayList队列实现方法

       最近参加金山网络的一次笔试,给我感觉是基础需要很扎实才行。其中就有一道题是关于自定义队列的。这个问题确实很常见,细心的人肯定第一时刻就去看ArrayList的源代码。下面我就给出其中几个方法的实现:

package 自定义队列;

import java.util.Arrays;

/**
 * 自己定义的一个队列,包括add,remove,clear,get,set,size等方法
 * @author Administrator
 *
 */
public class MyArrayList {
	private Object data[];
	private int size;
	
	public MyArrayList(){
		data=new Object[10];
	}
	public boolean add(Object obj){
		expandList(size+1);
		data[size++]=obj;
		return true;
	}
    
	public Object remove(int index){
		Rangcheck(index);
		Object obj=data[index];
		int num=size-index-1;
		if(num>0){
			System.arraycopy(data, index+1, data, index, num);
		}
		data[--size]=null;
		return obj;
	}
	
	public void clear(){
		for(int i=0;i<data.length;i++){
			data[i]=null;
		}
		size=0;
	}
	
	public Object get(int index){
		Rangcheck(index);
		return data[index];
	}
	
	public Object set(int index,Object obj){
		Rangcheck(index);
		Object oldobject=data[index];
		data[index]=obj;
		return oldobject;
	}
	
	public int size(){
		return size;
	}
	/**
	 * 扩容的方法
	 */
	public void  expandList(int addindex){
		int oldindex=data.length;
		if(addindex>oldindex){
			int newindex=(oldindex*3)/2+1;//此处是每次扩容的方式
			if(addindex>newindex)
				newindex=addindex;
			data=Arrays.copyOf(data, newindex);		
		}
	}
	
	public  void  Rangcheck(int index){
		if(index>=size){
			throw new IndexOutOfBoundsException(
		            "Index: "+index+", Size: "+size);
		}		
	}
	
	public static void main(String args[]){
		MyArrayList list=new MyArrayList();
		list.add("第一个元素");
		list.add("第二个元素");
		list.add("第三个元素");
		list.add("第四个元素");
		

		Object obj1=list.get(0);
		System.out.println("获取0位置的元素"+obj1);
		Object obj2=list.set(3, "插入的 元素");
		System.out.println("插入的元素为"+obj2);
		Object obj3=list.remove(3);
		System.out.println("移除3位置的元素"+obj3);
		System.out.println("当前的队列长度"+list.size);
		list.clear();
        System.out.println("当前的队列长度"+list.size());
		
	}
}

   对于每次扩容的大小,这个可以取一个最适合的值,还有位置异常的检测。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值