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
4 changes: 4 additions & 0 deletions group09/715061147/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
.metadata
.swp
RemoteSystemsTempFiles/
target
4 changes: 4 additions & 0 deletions group09/715061147/mvnhomework1/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
.classpath
.settings
.project
target
29 changes: 29 additions & 0 deletions group09/715061147/mvnhomework1/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.qsq.study</groupId>
<artifactId>mvnhomework1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>MvnHomeWork1</name>
<description>MvnHomeWork1</description>

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@
package com.qsq.study;

import java.util.Arrays;

public class ArrayList<E> implements List<E> {

private static final int DEFAULT_CAPACITY = 16;
private static final Object[] EMPTY_ELEMENT_DATA = {};
private Object[] elementData;
private int size = 0;

/*
* ����һ��Ĭ��������ArrayList
*/
public ArrayList() {
this(DEFAULT_CAPACITY);
}

/*
* ����һ��ָ����ʼ������ArrayList
*
* @param initialCapacity ��ʼ����
*
* @throws IllegalArgumentException ָ����ʼ����Ϊ����ʱ�׳��Ƿ������쳣
*/
public ArrayList(int initialCapacity) {
if (initialCapacity > 0) {
this.elementData = new Object[initialCapacity];
} else if (initialCapacity == 0) {
this.elementData = EMPTY_ELEMENT_DATA;
} else {
throw new IllegalArgumentException("Illegal Capacity " + initialCapacity);
}
}

@Override
public int size() {
return this.size;
}

@Override
public boolean isEmpty() {
return size == 0;
}

/*
* ����elementData��������
*
* @param capacity �µ���������
*/
private void grow(int capacity) {
if (capacity < elementData.length) {
return;
}
elementData = Arrays.copyOf(elementData, capacity);
}

@Override
public boolean add(E e) {
if (size == elementData.length) {
grow(size * 2);
}
elementData[size++] = e;
return true;
}

@Override
public E remove(int index) {
rangeCheck(index);

// move elements after index forward by 1
for (int i = index; i < size - 1; i++) {
elementData[i] = elementData[i + 1];
}
--size;

// TODO: JDK��ʵ��: 1.Ч�� 2.GC����
// System.arraycopy(elementData, index + 1, elementData, index, size -
// index - 1);
// elementData[--size] = null;

return null;
}

@Override
public boolean remove(Object o) {
int index = indexOf(o);

if (index < 0) {
return false;
}

remove(index);
return true;
}

@SuppressWarnings({ "unchecked" })
private E elementData(int index) {
return (E) elementData[index];
}

private void rangeCheck(int index) {
// TODO: JDKԴ����δ��index<0�������������Ϊ�Σ�
if (index < 0 || index >= size) {
throw new IndexOutOfBoundsException("Index:" + index + ", Size:" + size);
}
}

@Override
public E get(int index) {
rangeCheck(index);

return elementData(index);
}

@Override
public E set(int index, E element) {
rangeCheck(index);

E oldElement = elementData(index);
elementData[index] = element;
return oldElement;
}

@Override
public int indexOf(Object o) {
if (o == null) {
for (int i = 0; i < size; i++) {
if (elementData[i] == null) {
return i;
}
}
} else {
for (int i = 0; i < size; i++) {
if (o.equals(elementData[i])) {
return i;
}
}
}
return -1;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,169 @@
package com.qsq.study;

public class LinkedList<E> implements List<E>{

private Node<E> first;
private Node<E> last;
private int size;

private static class Node<T> {
T item;
Node<T> prev;
Node<T> next;

public Node(Node<T> prev, T item, Node<T> next) {
this.prev = prev;
this.item = item;
this.next = next;
}
}

/*
* �޲������캯��
*/
public LinkedList() {
first = null;
last = first;
size = 0;
}

@Override
public int size() {
return this.size;
}

@Override
public boolean isEmpty() {
return size == 0;
}

private void rangeCheck(int index) {
if (index < 0 || index >= size) {
throw new IndexOutOfBoundsException("Index:" + index + ", Size:" + size);
}
}

@Override
public boolean add(E e) {
if (first == null) {
// ������
first = new Node<E>(null, e, null);
} else if (last == null) {
// ����
last = new Node<E>(first, e, null);
first.next = last;
} else {
Node<E> node = new Node<E>(last, e, null);
last.next = node;
last = node;
}
++size;
return true;
}

@Override
public boolean remove(Object o) {
int index = indexOf(o);
if (index < 0 || index > size) {
return false;
}

remove(index);
return true;
}

@Override
public E remove(int index) {
rangeCheck(index);

Node<E> current = first;
while (index > 0) {
--index;
if (current == null) {
return null;
}
current = current.next;
}

E oldItem = current.item;

if (current.prev == null) {
// ɾ������ͷ���
first = current.next;
if (current.next != null) {
current.next.prev = null;
}
} else {
current.prev.next = current.next;
if (current.next != null) {
current.next.prev = current.prev;
}
}
--size;

return oldItem;
}

@Override
public E get(int index) {
rangeCheck(index);

int i = 0;
Node<E> current = first;
while (i < index) {
if (current == null) {
return null;
}
++i;
current = current.next;
}
return current.item;
}

@Override
public E set(int index, E element) {
rangeCheck(index);

Node<E> current = first;
while (index > 0) {
--index;
current = current.next;
}
E oldElement = current.item;
current.item = element;

return oldElement;
}

@Override
public int indexOf(Object o) {
if (first == null) {
return -1;
}

Node<E> current = first;
int index = 0;
if (o == null) {
while (current != null) {
if (current.item == null) {
return index;
} else {
current = current.next;
++index;
}
}
} else {
while (current != null) {
if (o.equals(current.item)) {
return index;
} else {
current = current.next;
++index;
}
}
}

return -1;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.qsq.study;

public interface List<E> {
int size();
boolean isEmpty();
boolean add(E e);
boolean remove(Object o);
E remove(int index);
E get(int index);
E set(int index, E element);
int indexOf(Object o);
}
Loading