Skip to content

Commit b87fad9

Browse files
author
luoziyihao
committed
arrayList 0.1
1 parent 8d10f0f commit b87fad9

File tree

4 files changed

+162
-28
lines changed

4 files changed

+162
-28
lines changed
Lines changed: 81 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,85 @@
11
package com.coding.basic;
22

3+
import java.util.Arrays;
4+
35
public class ArrayList implements List {
4-
5-
private int size = 0;
6-
7-
private Object[] elementData = new Object[100];
8-
9-
public void add(Object o){
10-
11-
}
12-
public void add(int index, Object o){
13-
14-
}
15-
16-
public Object get(int index){
17-
return null;
18-
}
19-
20-
public Object remove(int index){
21-
return null;
22-
}
23-
24-
public int size(){
25-
return -1;
26-
}
27-
28-
public Iterator iterator(){
29-
return null;
30-
}
31-
6+
7+
private int size = 0;
8+
9+
private Object[] elementData = new Object[100];
10+
11+
private int length() {
12+
return elementData.length;
13+
}
14+
15+
private static final int ENLARGE_LENGTH = 100;
16+
17+
private Object[] enlarge(Object[] origin) {
18+
return Arrays.copyOf(origin, origin.length + ENLARGE_LENGTH);
19+
}
20+
21+
private void enLargeElementData() {
22+
if (size == length()) {
23+
elementData = enlarge(elementData);
24+
}
25+
}
26+
27+
public void add(Object o) {
28+
enLargeElementData();
29+
elementData[size] = o;
30+
size++;
31+
}
32+
33+
public void add(int index, Object o) {
34+
checkIndex(index);
35+
enLargeElementData();
36+
// 备份 index 处及后面的数据
37+
Object[] elementsBehindIndex = backBehindElements(elementData, index);
38+
// 给index处 设值
39+
elementData[index] = o;
40+
// 追加 备份的数据
41+
appendElement(elementData, index, elementsBehindIndex);
42+
size++;
43+
}
44+
45+
private void appendElement(Object[] origin, int pos, Object[] append) {
46+
System.arraycopy(append, 0, origin, pos, append.length);
47+
}
48+
49+
private Object[] backBehindElements(Object[] elementData, int index) {
50+
int backSize = size - index;
51+
Object[] back = new Object[backSize];
52+
System.arraycopy(elementData, index, back, 0, backSize);
53+
return back;
54+
}
55+
56+
public Object get(int index) {
57+
checkIndex(index);
58+
return elementData[index];
59+
}
60+
61+
private void checkIndex(int index) {
62+
if (index < 0 || index >= size) {
63+
throw new ArrayIndexOutOfBoundsException(String.format("index=%s, size=%s", index, size));
64+
}
65+
}
66+
67+
public Object remove(int index) {
68+
checkIndex(index);
69+
Object[] back = backBehindElements(elementData, index + 1);
70+
System.arraycopy(back, 0, elementData, index, back.length);
71+
Object ret = elementData[index];
72+
elementData[index] = null;
73+
size--;
74+
return ret;
75+
}
76+
77+
public int size() {
78+
return size;
79+
}
80+
81+
public Iterator iterator() {
82+
return null;
83+
}
84+
3285
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.coding.api;
2+
3+
import org.junit.Test;
4+
import org.slf4j.Logger;
5+
import org.slf4j.LoggerFactory;
6+
7+
import java.util.Arrays;
8+
9+
/**
10+
* Created by luoziyihao on 2/25/17.
11+
*/
12+
public class ArraysTest {
13+
private final Logger logger = LoggerFactory.getLogger(this.getClass());
14+
15+
16+
@Test
17+
public void testCopyOf(){
18+
Object[] a = new Object[]{1, 2, 3, 4};
19+
Object[] b = Arrays.copyOf(a, 10);
20+
logger.info("a={}, b={}", Arrays.toString(a), Arrays.toString(b));
21+
}
22+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package com.coding.api;
2+
3+
import org.junit.Test;
4+
import org.slf4j.Logger;
5+
import org.slf4j.LoggerFactory;
6+
7+
import java.util.Arrays;
8+
9+
/**
10+
* Created by luoziyihao on 2/25/17.
11+
*/
12+
public class SystemTest {
13+
14+
private final Logger logger = LoggerFactory.getLogger(this.getClass());
15+
16+
@Test
17+
public void testArrayCopy() {
18+
int[] a = new int[]{1, 2, 3, 4, 5, 6, 7};
19+
int[] b = new int[]{11, 22, 33, 44, 55, 66, 77};
20+
System.arraycopy(a, 2, b, 4, 3);
21+
logger.info("b={}", Arrays.toString(b));
22+
23+
}
24+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package com.coding.basic;
2+
3+
import org.junit.Before;
4+
import org.junit.Test;
5+
import org.slf4j.Logger;
6+
import org.slf4j.LoggerFactory;
7+
8+
9+
/**
10+
* Created by luoziyihao on 2/25/17.
11+
*/
12+
public class ArrayListTest {
13+
14+
private final Logger logger = LoggerFactory.getLogger(this.getClass());
15+
16+
17+
private List list = new ArrayList();
18+
19+
@Before
20+
public void before() {
21+
22+
}
23+
24+
@Test
25+
public void add() throws Exception {
26+
list.add(1);
27+
}
28+
29+
@Test
30+
public void get() throws Exception {
31+
add();
32+
logger.info("{}", list.get(0));
33+
}
34+
35+
}

0 commit comments

Comments
 (0)