Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
package com.github.lqingchenl.coding2017.basic;

import java.util.Arrays;


public class ArrayList implements List {
private int size = 0;

private Object[] elementData = new Object[3];

/**
* 添加一个元素
*
* @param o
*/
public void add(Object o) {
elementData[size] = o;
size = size + 1;
if (size >= elementData.length) {
elementData = Arrays.copyOf(elementData, elementData.length * 2);
}
}

/**
* 往固定位置添加一个元素
*
* @param index
* @param o
*/
public void add(int index, Object o) {
if (get(index - 1) == null) { //原来为空,添加到指定位置
add(o);
return;
}
size++;
if (size >= elementData.length) {
elementData = Arrays.copyOf(elementData, elementData.length * 2);
}
System.arraycopy(elementData, index, elementData, index + 1, size - index);
elementData[index] = o;
}

/**
* 获取元素
*
* @param index
* @return
*/
public Object get(int index) {

if (index < 0 || index > size) {
throw new IndexOutOfBoundsException("索引越界");
}
return elementData[index];
}

/**
* 移除元素
*
* @param index
* @return
*/
public Object remove(int index) {
if (index < 0 || index > size) {
throw new IndexOutOfBoundsException("索引越界");
}
Object deleteData = elementData[index];
if (index == size - 1) {
elementData[index] = null;
} else {
int movedCount = size - index;
System.arraycopy(elementData, index + 1, elementData, index, movedCount);
}
size--;
return deleteData;
}

public int size() {
return size;
}

public Iterator iterator() {
return null;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
package com.github.lqingchenl.coding2017.basic;

import com.github.lqingchenl.coding2017.basic.ArrayList;
import org.junit.Test;
import org.junit.Before;
import org.junit.After;

import static org.junit.Assert.assertEquals;

/**
* ArrayList Tester.
*/
public class ArrayListTest {

private static ArrayList testArray = new ArrayList();

/**
* Method: add(Object o)
*/
@Test
public void testAddO() throws Exception {
testArray.add(1);
testArray.add(2);
assertEquals(1, testArray.get(0));
assertEquals(2, testArray.get(1));
}

/**
* Method: add(int index, Object o)
*/
@Test
public void testAddForIndexO() throws Exception {
testArray.add(1, 1);
testArray.add(2, 2);
assertEquals(1, testArray.get(0));
assertEquals(2, testArray.get(1));
}

/**
* Method: get(int index)
*/
@Test
public void testGet() throws Exception {
testArray.add(1);
assertEquals(1, testArray.get(0));
}

/**
* Method: remove(int index)
*/
@Test
public void testRemove() throws Exception {
testArray.add(1);
testArray.add(2);
assertEquals(1, testArray.remove(0));
assertEquals(2, testArray.remove(0));
}

/**
* Method: size()
*/
@Test
public void testSize() throws Exception {
testArray.add(1);
testArray.add(2);
assertEquals(2, testArray.size());
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.github.lqingchenl.coding2017.basic;

public interface Iterator {
public boolean hasNext();
public Object next();

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
package com.github.lqingchenl.coding2017.basic;

public class LinkedList implements List {

private int size = 0;

private Node head;

public void add(Object o) {
if (head == null) {
head = new Node(o);
} else {
Node nextNode = head;
while (nextNode.next != null) {
nextNode = nextNode.next;
}
nextNode.next = new Node(o);
}
size++;
}

public void add(int index, Object o) {
if (index == 0) {
addFirst(o);
return;
}
Node oldNode = getNode(index - 1);
Node newNode = new Node(o);
newNode.next = oldNode.next;
oldNode.next = newNode;
size++;
}

public Object get(int index) {
Node node = head;
for (int i = 0; i < index; i++) {
node = node.next;
}
return node.data;
}

public Node getNode(int index) {
Node node = head;
for (int i = 0; i < index; i++) {
node = node.next;
}
return node;
}

public Object remove(int index) {
if (index == 1) {
return removeFirst();
}
Node fatherNode = getNode(index - 2);
Node oldNode = getNode(index - 1);
fatherNode.next = oldNode.next;
size--;

return oldNode.data;
}

public int size() {
return size;
}

public void addFirst(Object o) {
Node newNode = new Node(o);
newNode.next = head;
head = newNode;
size++;
}

public void addLast(Object o) {
if (head == null) {
addFirst(o);
return;
}
Node newNode = new Node(o);
Node lastNode = getNode(size - 1);
lastNode.next = newNode;
size++;
}

public Object removeFirst() {
Node oldHead = head;
Node secondNode = head.next;
head = secondNode;
size--;
return oldHead.data;
}

public Object removeLast() {
if (size == 1) {
return removeFirst();
}
Object data = get(size - 1);
Node oldNode = getNode(size - 2);
oldNode.next = null;
size--;
return data;
}

public Iterator iterator() {
return null;
}


private static class Node {
Object data;
Node next;

public Node(Object data) {
this.data = data;
}

}

}
Loading