Last active
March 19, 2019 05:02
-
-
Save mikeyang01/db6baaa09149607c7c17b2b5d2d5bccd to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class ArrayList implements List { | |
private Object[] elements; // 数组 | |
private int length; // 数据的长度 | |
private int size; // 当前元素的个数 | |
public ArrayList() { | |
elements = new Object[10]; // 创建一个长度为10的数组 | |
this.length = 10; | |
} | |
public ArrayList(int length) { | |
elements = new Object[length]; // 创建一个长度为length的数组 | |
this.length = length; | |
} | |
// 创建检查空间是否足够的方法 | |
public void ensureCap() { | |
if (size >= length) { | |
Object[] array = new Object[length + 10]; | |
System.arraycopy(elements, 0, array, 0, size); | |
elements = array; // 把新数组赋值给旧数组 | |
length = length + 10; // 数组的长度增加10 | |
} | |
} | |
@Override | |
// 向指定位置添加元素 | |
public void add(int index, Object obj) { | |
if (index < 0 || index > size) | |
return; | |
// 空间是否足够 | |
ensureCap(); | |
for (int i = size; i > index; i--) { | |
elements[i] = elements[i - 1]; // 把前一个值赋给后一个值 | |
} | |
elements[index] = obj; | |
size++; | |
} | |
@Override | |
public void add(Object obj) { | |
add(size, obj); | |
} | |
@Override | |
// 删除元素 | |
public Object remove(int index) { | |
if (index < 0 || index >= size) | |
return null; | |
Object obj = elements[index]; | |
for (int i = index; i < size - 1; i++) { | |
elements[i] = elements[i + 1]; // 把后一个值赋给前一个值 | |
} | |
size--; | |
elements[size] = null; // 把最后一个数据赋值为null1 | |
return obj; | |
} | |
@Override | |
// 设置某个位置的数据 | |
public void set(int index, Object obj) { | |
if (index < 0 || index >= size) | |
return; | |
elements[index] = obj; | |
} | |
@Override | |
// 获取数据 | |
public Object get(int index) { | |
if (index < 0 || index >= size) | |
return null; | |
return elements[index]; | |
} | |
// 获取数据的长度 | |
@Override | |
public int size() { | |
return size; | |
} | |
@Override | |
public Iterator iterator() { | |
return new Iterator() { | |
// 当前位置 | |
private int position = -1; | |
public boolean hasNext() { | |
if (position + 1 < size) | |
return true; | |
return false; | |
} | |
@Override | |
public Object next() { | |
return get(++position); | |
} | |
@Override | |
public Object remove() { | |
return ArrayList.this.remove(position--); | |
} | |
}; | |
} | |
} | |
class ArrayList implements List { | |
private Object[] elements; // 数组 | |
private int length; // 数据的长度 | |
private int size; // 当前元素的个数 | |
public ArrayList() { | |
elements = new Object[10]; // 创建一个长度为10的数组 | |
this.length = 10; | |
} | |
public ArrayList(int length) { | |
elements = new Object[length]; // 创建一个长度为length的数组 | |
this.length = length; | |
} | |
// 创建检查空间是否足够的方法 | |
public void ensureCap() { | |
if (size >= length) { | |
Object[] array = new Object[length + 10]; | |
System.arraycopy(elements, 0, array, 0, size); | |
elements = array; // 把新数组赋值给旧数组 | |
length = length + 10; // 数组的长度增加10 | |
} | |
} | |
@Override | |
// 向指定位置添加元素 | |
public void add(int index, Object obj) { | |
if (index < 0 || index > size) | |
return; | |
// 空间是否足够 | |
ensureCap(); | |
for (int i = size; i > index; i--) { | |
elements[i] = elements[i - 1]; // 把前一个值赋给后一个值 | |
} | |
elements[index] = obj; | |
size++; | |
} | |
@Override | |
public void add(Object obj) { | |
add(size, obj); | |
} | |
@Override | |
// 删除元素 | |
public Object remove(int index) { | |
if (index < 0 || index >= size) | |
return null; | |
Object obj = elements[index]; | |
for (int i = index; i < size - 1; i++) { | |
elements[i] = elements[i + 1]; // 把后一个值赋给前一个值 | |
} | |
size--; | |
elements[size] = null; // 把最后一个数据赋值为null1 | |
return obj; | |
} | |
@Override | |
// 设置某个位置的数据 | |
public void set(int index, Object obj) { | |
if (index < 0 || index >= size) | |
return; | |
elements[index] = obj; | |
} | |
@Override | |
// 获取数据 | |
public Object get(int index) { | |
if (index < 0 || index >= size) | |
return null; | |
return elements[index]; | |
} | |
// 获取数据的长度 | |
@Override | |
public int size() { | |
return size; | |
} | |
@Override | |
public Iterator iterator() { | |
return new Iterator() { | |
// 当前位置 | |
private int position = -1; | |
public boolean hasNext() { | |
if (position + 1 < size) | |
return true; | |
return false; | |
} | |
@Override | |
public Object next() { | |
return get(++position); | |
} | |
@Override | |
public Object remove() { | |
return ArrayList.this.remove(position--); | |
} | |
}; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment