1 package demo;
2
3 import java.util.Arrays;
4
5 public class MyArrayList<T> {
6 Object[] t;
7 int size;
8 private static final int MAX_ARRAY_SIZE = 5;
9 private static final Object[] EMPTY_ELEMENTDATA = {};
10
11 public MyArrayList(){
12 //必须给t赋值,不然每次都必须判断t是否为null,影响效率
13 t = EMPTY_ELEMENTDATA;
14 }
15
16 public boolean add(T e){
17 //必须给t赋值,不然每次都必须在这里判断t是否为null,影响效率
18 if(t.length == size){
19 grow(size + 1);
20 }
21 t[size++] = e;
22 return true;
23 }
24
25 private void grow(int minCapacity) {
26 int newCapacity = t.length + t.length >> 1;
27 //minCapacity溢出
28 if(minCapacity < 0)
29 throw new RuntimeException();
30 //newCapacity < minCapacity必须加,因为刚开始时newCapacity增长小于minCapacity
31 if(newCapacity < minCapacity || newCapacity < 0 || newCapacity > MAX_ARRAY_SIZE){
32 if(minCapacity > MAX_ARRAY_SIZE){
33 throw new RuntimeException();
34 }else{
35 //生长到最大
36 t = Arrays.copyOf(t, MAX_ARRAY_SIZE);
37 }
38 }else{
39 //生长到newCapacity
40 t = Arrays.copyOf(t, newCapacity);
41 }
42 }
43 }