最近参加金山网络的一次笔试,给我感觉是基础需要很扎实才行。其中就有一道题是关于自定义队列的。这个问题确实很常见,细心的人肯定第一时刻就去看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()); } }
对于每次扩容的大小,这个可以取一个最适合的值,还有位置异常的检测。