实现Arraylist

Java实现ArrayList

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
public class MyArrayList<E> {

//存储元素的数组
private Object[] elementData;

//初始大小
private int size;

//默认大小
private static final int DEFAULT_CAPACITY = 10;

//构造方法
public MyArrayList() {
elementData = new Object[DEFAULT_CAPACITY];
}

public MyArrayList(int capacity){
if (capacity < 0){
throw new RuntimeException("容器的容量不合法");
}else if(capacity == 0){
elementData = new Object[DEFAULT_CAPACITY];
}else {
elementData = new Object[capacity];
}
elementData = new Object[capacity];
}

public int size(){
return size;
}

public boolean isEmpty(){
return size == 0 ? true : false;
}

//add方法
public void add(E element){
//扩容操作
if(size==elementData.length){
//定义一个新数组,新数组大小是原数组的1.5倍(右移一位相当于除以二)
Object[] newArray = new Object[elementData.length+(elementData.length>>1)];
//将数据复制到新创建的大数组当中
System.arraycopy(elementData,0,newArray,0,elementData.length);
//将新数组赋值为elementData,原来的数据会被垃圾回收
elementData = newArray;
}
elementData[size++] = element;

}

//get方法
public E get(int index){
//索引判断
checkRange(index);
return (E)elementData[index];
}

//索引判断的方法
public void checkRange(int index){
//索引判断 [0,size)
if (index < 0 || index > size -1){
//不合法,抛出异常
throw new RuntimeException("索引不合法!"+index);
}
}

public void remove(E element){
//element,将它和所有元素一一比较,获得第一个比较为true的 返回
for(int i=0;i<size;i++){
if(element.equals(get(i))){
//将该元素从此处移除
remove(i);
}
}
}

//删除
public void remove(int index){
int numMoved = elementData.length - index -1;
if(numMoved > 0){
System.arraycopy(elementData,index+1,elementData,index,numMoved);
}
elementData[--size] = null;
}

//set方法
public void set(E element,int index){
checkRange(index);
elementData[index] = element;
}

//重写toString方法
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("[");
for (int i=0;i<size;i++){
sb.append(elementData[i]+",");
}
sb.setCharAt(sb.length()-1,']');
return sb.toString();

}

public static void main(String[] args) {
MyArrayList s1 = new MyArrayList();
for (int i=0;i<20;i++){
s1.add("add"+i);
}
System.out.println(s1);
}
}
文章作者: L1nker4
文章链接: https://l1n.wang/Java-Arraylist/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 L1nker4