模仿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 }
View Code

第二步: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 }
View Code

第三步: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 }    
View Code

到此,我们可以使用自己实现的一些方法!

 

posted @ 2017-12-19 18:44  superdrew  阅读(258)  评论(0编辑  收藏  举报