Java集合框架浅谈-List(二)

来源:互联网 发布:java api文档中文 编辑:程序博客网 时间:2024/05/07 03:09

ArrayList的最大优点是查询速度较快,但是插入和删除效率低。下面参照ArrayList的源码,写一个山寨的MyArrayList类,来体验一下为什么插入和删除慢。在这个自定义的类中,只定义了add(), get(), size(), remove()几个方法。

package com.test.list;public class MyArrayList{private Object[]data = new Object[10];private int size = 0;public void add(Object obj){if(size == data.length)//判断数组是否已装满{//如果size等于数组的长度,就要新创建一个数组Object[]newData = new Object[data.length * 3 / 2 + 1];//将原数组中的元素拷贝到新数组中System.arraycopy(data, 0, newData, 0, data.length);//将data指向新数组data = newData;}data[size++] = obj;}public Object get(int index){checkIndex(index);return data[index];}public int size(){return size;}public void remove(int index){checkIndex(index);//将制定位置的以后的元素先前复制,将最后一个元素设为nullSystem.arraycopy(data, index+1, data, index, size - index - 1);data[--size]= null;}private void checkIndex(int index){//如果传入的index超出范围,就会抛出IndexOutOfBoundsExceptionif(index >= size)throw new java.lang.IndexOutOfBoundsException("Index: "+ index + ", Size: "+ size);}}

创建MyArrayList实例,并演示一下方法。通过上面的代码可以看出,在插入和删除元素时都要复制元素,所以效率才会低。

package com.test.list;public class MyArrayListTest{public static void main(String[] args){MyArrayList list = new MyArrayList();list.add("java01");list.add("java02");list.add("java03");System.out.println(list.size());//将java02删除list.remove(1);for(int i = 0; i < list.size(); i++){System.out.println(list.get(i));}}}


 


 

 

 

原创粉丝点击