模仿ArrayList底层实现
制作一个简单的Arraylist的底层执行实现:
我们需要有三个类:① ArrayList.java;② List.java;③ Test.java;以此做一个简单的模仿
第一步:ArrayList.java类
1 public class ArrayList implements List{ 2 3 private Object[] elementData;//底层的数组 4 5 private int size;//元素的个数 6 7 public ArrayList() { 8 this.elementData = new Object[20]; 9 } 10 11 public ArrayList(int initialCapacity) { 12 this.elementData = new Object[initialCapacity]; 13 } 14 15 public void add(Object obj) { 16 //扩容的时机 当list的内容 与 数组的长度相等 17 if(size == elementData.length){ 18 /*//1.创建一个更大空间的数组 19 Object [] arr = new Object [elementData.length * 2]; 20 //2.把旧数组 copy到 新的数组 21 for(int i =0; i<elementData.length;i++){ 22 arr[i] = elementData[i]; 23 } 24 //3.将新的数组引用给旧的数组引用 25 elementData = arr;*/ 26 elementData = Arrays.copyOf(elementData, elementData.length * 2); 27 } 28 /*elementData[size] = obj;//size 从0开始 29 size++;*/ 30 elementData[size++]=obj; 31 } 32 33 public int size() { 34 return size; 35 } 36 37 public Object get(int inedex) { 38 return elementData[inedex]; 39 } 40 41 public boolean isEmpty() { 42 return size == 0; 43 } 44 45 @Override 46 public String toString() { 47 StringBuilder sb = new StringBuilder("["); 48 for(int i=0;i<size;i++){ 49 if(i!=size-1){ 50 sb.append(elementData[i]+","); 51 }else{ 52 sb.append(elementData[i]); 53 } 54 } 55 sb.append("]"); 56 return sb.toString(); 57 } 58 }
第二步:List.java类:
1 public interface List{ 2 //添加元素方法 3 public void add(Object obj); 4 5 //元素的长度 6 public int size(); 7 8 //获取指定位置上的元素 9 public Object get(int index); 10 11 //判断集合是否为空 12 public boolean isEmpty(); 13 }
第三步:Test.java类:
1 public class Test{ 2 public static void main(String [] args){ 3 Arraylist list = new Arraylist(); 4 for(int i=0; i<10; i++){ 5 list.add("elem" + i); 6 } 7 System.out.println(isEmpty()); 8 System.out.println(list.size()); 9 System.out.println(list); 10 } 11 }
到此,我们可以使用自己实现的一些方法!