Skip to content

Commit 40c9e4f

Browse files
committed
update from upstream
1 parent 3fb5fa2 commit 40c9e4f

File tree

16 files changed

+611
-1
lines changed

16 files changed

+611
-1
lines changed

.gitignore

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
*.class
2-
32
# Mobile Tools for Java (J2ME)
43
.mtj.tmp/
54

@@ -14,3 +13,9 @@ hs_err_pid*
1413
#ide config
1514
.metadata
1615
.recommenders
16+
.idea/
17+
*.iml
18+
rebel.*
19+
.rebel.*
20+
21+
target
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
3+
<modelVersion>4.0.0</modelVersion>
4+
<artifactId>basic</artifactId>
5+
<parent>
6+
<groupId>com.coding</groupId>
7+
<artifactId>parent</artifactId>
8+
<version>1.0-SNAPSHOT</version>
9+
<relativePath>../parent/pom.xml</relativePath>
10+
</parent>
11+
12+
</project>
Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
package com.coding.basic;
2+
3+
import java.util.Arrays;
4+
5+
public class ArrayList implements List {
6+
7+
private int size = 0;
8+
9+
private Object[] elementData = new Object[100];
10+
11+
private Iterator iterator = new ArrayListIterator();
12+
13+
private int length() {
14+
return elementData.length;
15+
}
16+
17+
private static final int ENLARGE_LENGTH = 100;
18+
19+
private Object[] enlarge(Object[] origin) {
20+
return Arrays.copyOf(origin, origin.length + ENLARGE_LENGTH);
21+
}
22+
23+
private void enLargeElementData() {
24+
if (size == length()) {
25+
elementData = enlarge(elementData);
26+
}
27+
}
28+
29+
public void add(Object o) {
30+
enLargeElementData();
31+
elementData[size] = o;
32+
size++;
33+
}
34+
35+
public void add(int index, Object o) {
36+
checkForAdd(index);
37+
enLargeElementData();
38+
// 备份 index 处及后面的数据
39+
Object[] elementsBehindIndex = backBehindElements(elementData, index);
40+
// 给index处 设值
41+
elementData[index] = o;
42+
// 追加 备份的数据
43+
appendElement(elementData, index, elementsBehindIndex);
44+
size++;
45+
}
46+
47+
private void appendElement(Object[] origin, int pos, Object[] append) {
48+
System.arraycopy(append, 0, origin, pos, append.length);
49+
}
50+
51+
private Object[] backBehindElements(Object[] elementData, int index) {
52+
int backSize = size - index;
53+
Object[] back = new Object[backSize];
54+
System.arraycopy(elementData, index, back, 0, backSize);
55+
return back;
56+
}
57+
58+
public Object get(int index) {
59+
checkIndex(index);
60+
return elementData[index];
61+
}
62+
63+
private void checkIndex(int index) {
64+
if (index < 0 || index >= size) {
65+
throw new ArrayIndexOutOfBoundsException(String.format("index=%s, size=%s", index, size));
66+
}
67+
}
68+
69+
private void checkForAdd(int index) {
70+
if (index < 0 || index > size) {
71+
throw new ArrayIndexOutOfBoundsException(String.format("index=%s, size=%s", index, size));
72+
}
73+
}
74+
75+
public Object remove(int index) {
76+
checkIndex(index);
77+
Object[] back = backBehindElements(elementData, index + 1);
78+
System.arraycopy(back, 0, elementData, index, back.length);
79+
Object ret = elementData[index];
80+
elementData[index] = null;
81+
size--;
82+
return ret;
83+
}
84+
85+
public int size() {
86+
return size;
87+
}
88+
89+
public Iterator iterator() {
90+
return iterator;
91+
}
92+
93+
private class ArrayListIterator implements Iterator {
94+
95+
int next = 0;
96+
97+
@Override
98+
public boolean hasNext() {
99+
return next < size;
100+
}
101+
102+
@Override
103+
public Object next() {
104+
return elementData[next++];
105+
}
106+
}
107+
108+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package com.coding.basic;
2+
3+
public class BinaryTreeNode {
4+
5+
private Object data;
6+
private BinaryTreeNode left;
7+
private BinaryTreeNode right;
8+
9+
public Object getData() {
10+
return data;
11+
}
12+
public void setData(Object data) {
13+
this.data = data;
14+
}
15+
public BinaryTreeNode getLeft() {
16+
return left;
17+
}
18+
public void setLeft(BinaryTreeNode left) {
19+
this.left = left;
20+
}
21+
public BinaryTreeNode getRight() {
22+
return right;
23+
}
24+
public void setRight(BinaryTreeNode right) {
25+
this.right = right;
26+
}
27+
28+
public BinaryTreeNode insert(Object o){
29+
return null;
30+
}
31+
32+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.coding.basic;
2+
3+
public interface Iterator {
4+
public boolean hasNext();
5+
public Object next();
6+
7+
}
Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
package com.coding.basic;
2+
3+
public class LinkedList implements List {
4+
5+
private Node head;
6+
private int size = 0;
7+
8+
public void add(Object o) {
9+
Node newNode = new Node(o, null);
10+
if (head == null) {
11+
head = newNode;
12+
} else {
13+
node(size - 1).next = newNode;
14+
}
15+
size++;
16+
}
17+
18+
public void add(int index, Object o) {
19+
checkForAdd(index);
20+
if (index == size) {
21+
add(o);
22+
}else {
23+
Node newNode = new Node(o, null);
24+
if (index == 0){
25+
addFirst(o);
26+
} else {
27+
Node preNode = node(index - 1);
28+
Node now = preNode.next;
29+
preNode.next = newNode;
30+
newNode.next = now;
31+
size++;
32+
}
33+
}
34+
35+
}
36+
37+
private Node node(int index) {
38+
Node x = head;
39+
for (int i = 0; i < index; i++) {
40+
x = x.next;
41+
}
42+
return x;
43+
}
44+
45+
public Object get(int index) {
46+
checkIndex(index);
47+
return node(index).data;
48+
}
49+
50+
/**
51+
* 让被删除的引用的持有者指向下一个节点
52+
* @param index
53+
* @return
54+
*/
55+
public Object remove(int index) {
56+
final Object ret;
57+
checkIndex(index);
58+
if (index == 0) {
59+
Node removeNode = head;
60+
ret = head.data;
61+
head = removeNode.next;
62+
} else {
63+
Node pre = node(index - 1);
64+
Node removeNode = pre.next;
65+
ret = removeNode.data;
66+
pre.next = removeNode.next;
67+
}
68+
size--;
69+
return ret;
70+
}
71+
72+
public int size() {
73+
return size;
74+
}
75+
76+
public void addFirst(Object o) {
77+
head = new Node(o, head);;
78+
size++;
79+
}
80+
81+
public void addLast(Object o) {
82+
add(o);
83+
}
84+
85+
public Object removeFirst() {
86+
if (size == 0){
87+
return null;
88+
}else {
89+
return remove(0);
90+
}
91+
}
92+
93+
public Object removeLast() {
94+
return remove(size - 1);
95+
}
96+
97+
public Iterator iterator() {
98+
return null;
99+
}
100+
101+
private void checkIndex(int index) {
102+
if (index < 0 || index >= size) {
103+
throw new ArrayIndexOutOfBoundsException(String.format("index=%s, size=%s", index, size));
104+
}
105+
}
106+
107+
private void checkForAdd(int index) {
108+
if (index < 0 || index > size) {
109+
throw new ArrayIndexOutOfBoundsException(String.format("index=%s, size=%s", index, size));
110+
}
111+
}
112+
113+
private static class Node {
114+
Object data;
115+
Node next;
116+
117+
public Node() {
118+
}
119+
120+
public Node(Object data, Node next) {
121+
this.data = data;
122+
this.next = next;
123+
}
124+
}
125+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.coding.basic;
2+
3+
public interface List {
4+
public void add(Object o);
5+
public void add(int index, Object o);
6+
public Object get(int index);
7+
public Object remove(int index);
8+
public int size();
9+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.coding.basic;
2+
3+
public class Queue {
4+
5+
public void enQueue(Object o){
6+
}
7+
8+
public Object deQueue(){
9+
return null;
10+
}
11+
12+
public boolean isEmpty(){
13+
return false;
14+
}
15+
16+
public int size(){
17+
return -1;
18+
}
19+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.coding.basic;
2+
3+
public class Stack {
4+
private ArrayList elementData = new ArrayList();
5+
6+
public void push(Object o){
7+
}
8+
9+
public Object pop(){
10+
return null;
11+
}
12+
13+
public Object peek(){
14+
return null;
15+
}
16+
public boolean isEmpty(){
17+
return false;
18+
}
19+
public int size(){
20+
return -1;
21+
}
22+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
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.ArrayList;
8+
import java.util.Arrays;
9+
import java.util.List;
10+
11+
/**
12+
* Created by luoziyihao on 2/25/17.
13+
*/
14+
public class ArrayListTest {
15+
16+
private final Logger logger = LoggerFactory.getLogger(this.getClass());
17+
18+
@Test
19+
public void testAdd(){
20+
List<Object> list = new ArrayList<Object>(Arrays.asList(0, 1, 2, 3));
21+
logger.info("list={}", list);
22+
list.add(5, 2);
23+
logger.info("list={}", list);
24+
}
25+
}

0 commit comments

Comments
 (0)