Skip to content

Instantly share code, notes, and snippets.

@mikeyang01
Last active March 19, 2019 05:02
Show Gist options
  • Save mikeyang01/db6baaa09149607c7c17b2b5d2d5bccd to your computer and use it in GitHub Desktop.
Save mikeyang01/db6baaa09149607c7c17b2b5d2d5bccd to your computer and use it in GitHub Desktop.
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