源码实现ArrayList的常用方法
2016-07-29 12:32
337 查看
关于ArrayList,用起来非常的方便,对于一些常用的方法,如果能够自己实现 一下,深入到源码去实现一下它, 必定有深的认识。下面自己实现一个myArrayList,完成ArrayList的一些基本的方法,比如Add,get,set,remove的方法等等。
package myArrayList; public class myArrayList { //定义一个Object类的数组 private Object[] elementsData; //容器中对象的个数 private int size; public int size(){ return size; } /* *虽然ArrayList为动态的数组,因为其底层实现还是根据数组实现的,所以其还是有一个初始的大小,只是再add增加到大于DEFAULT_CAPACIT的时候,涉及到数组的 *扩容问题 */ private static final int DEFAULT_CAPACITY = 10; public myArrayList(){ this(DEFAULT_CAPACITY); } public myArrayList(int initialCapacity){ // if(initialCapacity<0) try { throw new Exception(); } catch (Exception e) { e.printStackTrace(); } else elementsData=new Object[initialCapacity]; } //数组 public void Add(Object obj){ //数组扩容问题 if(size>=elementsData.length){ Object[] newArray=new Object[size*2+1]; System.arraycopy(elementsData, 0, newArray, 0, elementsData.length); elementsData=newArray; } elementsData[size++]=obj; } //得到索引下标的对象 public Object get(int index){ rangeCheck(index); return elementsData[index]; } //移除索引下标的对象 public void remove(int index){ rangeCheck(index); int numMoved = size - index - 1; if (numMoved > 0) System.arraycopy(elementsData, index+1, elementsData, index, numMoved); elementsData[--size] = null; } //直接移除给定的对象 public void remove(Object obj){ for(int i=0;i<elementsData.length;i++){ if(elementsData[i].equals(obj)) { remove(i); return ; } } } /* * 遍历一下,当然这个遍历并没有按照源码的方式实现, * 只是为了测试一个写的方法 */ public void traverse(){ for(int i=0;i<size;i++){ System.out.println(elementsData[i]); } } /* * 把给定的对象放在具体的索引下标下 */ public void set(int index,Object obj){ rangeCheck(index); Object oldvalue=elementsData[index]; elementsData[index]=obj; } //检测索引越界的问题 private void rangeCheck(int index) { if (index >= size||index<0) try { throw new Exception(); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { myArrayList list=new myArrayList(); list.Add("aaa"); list.Add("bbb"); list.Add("ccc"); list.Add("ddd"); list.Add("aaa"); list.remove(2); list.set(2, 123); list.traverse(); } }
相关文章推荐
- C#.Net ArrayList的使用方法
- VBS ArrayList Class vbs中的数组类
- C#中数组Array,ArrayList,泛型List详细对比
- C#中Arraylist的sort函数用法实例分析
- C#中ArrayList的使用方法
- C#中Array与ArrayList用法及转换的方法
- C#生成随机ArrayList的方法
- c# ArrayList的使用方法小总结
- PHP实现C#山寨ArrayList的方法
- PowerShell中使用ArrayList实现数组插入、删除、添加例子
- 在JavaScript中构建ArrayList示例代码
- js实现ArrayList功能附实例代码
- 2种Java删除ArrayList中的重复元素的方法
- java arrayList遍历的四种方法及Java中ArrayList类的用法
- Java ArrayList.toArray(T[]) 方法的参数类型是 T 而不是 E的原因分析
- 分析Java中ArrayList与LinkedList列表结构的源码
- 由ArrayList来深入理解Java中的fail-fast机制
- Java中ArrayList类的用法与源码完全解析
- Java ArrayList 数组之间相互转换
- java使用listIterator逆序arraylist示例分享