Skip to content

Commit 564f89a

Browse files
author
Rong Huang
authored
Merge pull request onlyliuxin#15 from lqingchenl/master
第一次提交作业
2 parents a2e298b + 5cc9d7c commit 564f89a

File tree

10 files changed

+596
-0
lines changed

10 files changed

+596
-0
lines changed
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
package com.github.lqingchenl.coding2017.basic;
2+
3+
import java.util.Arrays;
4+
5+
6+
public class ArrayList implements List {
7+
private int size = 0;
8+
9+
private Object[] elementData = new Object[3];
10+
11+
/**
12+
* 添加一个元素
13+
*
14+
* @param o
15+
*/
16+
public void add(Object o) {
17+
elementData[size] = o;
18+
size = size + 1;
19+
if (size >= elementData.length) {
20+
elementData = Arrays.copyOf(elementData, elementData.length * 2);
21+
}
22+
}
23+
24+
/**
25+
* 往固定位置添加一个元素
26+
*
27+
* @param index
28+
* @param o
29+
*/
30+
public void add(int index, Object o) {
31+
if (get(index - 1) == null) { //原来为空,添加到指定位置
32+
add(o);
33+
return;
34+
}
35+
size++;
36+
if (size >= elementData.length) {
37+
elementData = Arrays.copyOf(elementData, elementData.length * 2);
38+
}
39+
System.arraycopy(elementData, index, elementData, index + 1, size - index);
40+
elementData[index] = o;
41+
}
42+
43+
/**
44+
* 获取元素
45+
*
46+
* @param index
47+
* @return
48+
*/
49+
public Object get(int index) {
50+
51+
if (index < 0 || index > size) {
52+
throw new IndexOutOfBoundsException("索引越界");
53+
}
54+
return elementData[index];
55+
}
56+
57+
/**
58+
* 移除元素
59+
*
60+
* @param index
61+
* @return
62+
*/
63+
public Object remove(int index) {
64+
if (index < 0 || index > size) {
65+
throw new IndexOutOfBoundsException("索引越界");
66+
}
67+
Object deleteData = elementData[index];
68+
if (index == size - 1) {
69+
elementData[index] = null;
70+
} else {
71+
int movedCount = size - index;
72+
System.arraycopy(elementData, index + 1, elementData, index, movedCount);
73+
}
74+
size--;
75+
return deleteData;
76+
}
77+
78+
public int size() {
79+
return size;
80+
}
81+
82+
public Iterator iterator() {
83+
return null;
84+
}
85+
86+
}
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package com.github.lqingchenl.coding2017.basic;
2+
3+
import com.github.lqingchenl.coding2017.basic.ArrayList;
4+
import org.junit.Test;
5+
import org.junit.Before;
6+
import org.junit.After;
7+
8+
import static org.junit.Assert.assertEquals;
9+
10+
/**
11+
* ArrayList Tester.
12+
*/
13+
public class ArrayListTest {
14+
15+
private static ArrayList testArray = new ArrayList();
16+
17+
/**
18+
* Method: add(Object o)
19+
*/
20+
@Test
21+
public void testAddO() throws Exception {
22+
testArray.add(1);
23+
testArray.add(2);
24+
assertEquals(1, testArray.get(0));
25+
assertEquals(2, testArray.get(1));
26+
}
27+
28+
/**
29+
* Method: add(int index, Object o)
30+
*/
31+
@Test
32+
public void testAddForIndexO() throws Exception {
33+
testArray.add(1, 1);
34+
testArray.add(2, 2);
35+
assertEquals(1, testArray.get(0));
36+
assertEquals(2, testArray.get(1));
37+
}
38+
39+
/**
40+
* Method: get(int index)
41+
*/
42+
@Test
43+
public void testGet() throws Exception {
44+
testArray.add(1);
45+
assertEquals(1, testArray.get(0));
46+
}
47+
48+
/**
49+
* Method: remove(int index)
50+
*/
51+
@Test
52+
public void testRemove() throws Exception {
53+
testArray.add(1);
54+
testArray.add(2);
55+
assertEquals(1, testArray.remove(0));
56+
assertEquals(2, testArray.remove(0));
57+
}
58+
59+
/**
60+
* Method: size()
61+
*/
62+
@Test
63+
public void testSize() throws Exception {
64+
testArray.add(1);
65+
testArray.add(2);
66+
assertEquals(2, testArray.size());
67+
}
68+
69+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.github.lqingchenl.coding2017.basic;
2+
3+
public interface Iterator {
4+
public boolean hasNext();
5+
public Object next();
6+
7+
}
Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
package com.github.lqingchenl.coding2017.basic;
2+
3+
public class LinkedList implements List {
4+
5+
private int size = 0;
6+
7+
private Node head;
8+
9+
public void add(Object o) {
10+
if (head == null) {
11+
head = new Node(o);
12+
} else {
13+
Node nextNode = head;
14+
while (nextNode.next != null) {
15+
nextNode = nextNode.next;
16+
}
17+
nextNode.next = new Node(o);
18+
}
19+
size++;
20+
}
21+
22+
public void add(int index, Object o) {
23+
if (index == 0) {
24+
addFirst(o);
25+
return;
26+
}
27+
Node oldNode = getNode(index - 1);
28+
Node newNode = new Node(o);
29+
newNode.next = oldNode.next;
30+
oldNode.next = newNode;
31+
size++;
32+
}
33+
34+
public Object get(int index) {
35+
Node node = head;
36+
for (int i = 0; i < index; i++) {
37+
node = node.next;
38+
}
39+
return node.data;
40+
}
41+
42+
public Node getNode(int index) {
43+
Node node = head;
44+
for (int i = 0; i < index; i++) {
45+
node = node.next;
46+
}
47+
return node;
48+
}
49+
50+
public Object remove(int index) {
51+
if (index == 1) {
52+
return removeFirst();
53+
}
54+
Node fatherNode = getNode(index - 2);
55+
Node oldNode = getNode(index - 1);
56+
fatherNode.next = oldNode.next;
57+
size--;
58+
59+
return oldNode.data;
60+
}
61+
62+
public int size() {
63+
return size;
64+
}
65+
66+
public void addFirst(Object o) {
67+
Node newNode = new Node(o);
68+
newNode.next = head;
69+
head = newNode;
70+
size++;
71+
}
72+
73+
public void addLast(Object o) {
74+
if (head == null) {
75+
addFirst(o);
76+
return;
77+
}
78+
Node newNode = new Node(o);
79+
Node lastNode = getNode(size - 1);
80+
lastNode.next = newNode;
81+
size++;
82+
}
83+
84+
public Object removeFirst() {
85+
Node oldHead = head;
86+
Node secondNode = head.next;
87+
head = secondNode;
88+
size--;
89+
return oldHead.data;
90+
}
91+
92+
public Object removeLast() {
93+
if (size == 1) {
94+
return removeFirst();
95+
}
96+
Object data = get(size - 1);
97+
Node oldNode = getNode(size - 2);
98+
oldNode.next = null;
99+
size--;
100+
return data;
101+
}
102+
103+
public Iterator iterator() {
104+
return null;
105+
}
106+
107+
108+
private static class Node {
109+
Object data;
110+
Node next;
111+
112+
public Node(Object data) {
113+
this.data = data;
114+
}
115+
116+
}
117+
118+
}

0 commit comments

Comments
 (0)