集合自定义实现Arraylist与迭代器及其遍历
import java.util.Arrays;
import java.util.Iterator;
/**
-
BaiWei
-
2019/12/5 20:07
*/
public class DIYArrayListGY1317 implements Iterable {
private Object[] elementData;
private int size;//构造函数
public DIYArrayListGY1317() {
this(10);
}public DIYArrayListGY1317(int val) {
if (val < 0) {
throw new IllegalArgumentException(“参数异常”);
}
this.elementData = new Object[val];
this.size = 0;
}public boolean add(T value) {
if (this.size == this.elementData.length) {
this.elementData = Arrays.copyOf(this.elementData, this.elementData.length * 2);
}
this.elementData[size++] = value;
return true;
}public int size() {
return this.size;
}
public Object get(int index) {
if (index < 0 || index >= this.size) {
throw new IllegalArgumentException(index + “下标越界”);
}
return this.elementData[index];
}public T remove1(int index) {
if (index < 0 || index >= this.size) {
throw new IllegalArgumentException(index + “下标越界”);
}
T oldValue = (T) elementData[index];
for (int i = index; i < this.size - 1; i++) {
this.elementData[i] = this.elementData[i + 1];
}
this.elementData[size - 1] = null;
–this.size;
return oldValue;
}/**
- 自定义迭代器实现
- @return
*/
@Override
public Iterator iterator() {
return new DIYItor();
}
public class DIYItor implements Iterator{
//当前位置
private int course;public DIYItor(){ course=0; } /** * 重写hasNext方法 * @return */ @Override public boolean hasNext() { return this.course<size; } /** * 重写next方法 * @return */ @Override public Object next() { return elementData[course++]; } /** * 重写remove方法 */ public void remove(){ //调用ArrayList自身的删除方法 remove1(course); } }
public static void main(String[] args) {
DIYArrayListGY1317 ll = new DIYArrayListGY1317<>();
ll.add(10);
ll.add(12);
ll.add(15);
ll.add(16);
ll.add(17);
ll.add(18);
ll.add(19);
Iterator iterator=ll.iterator();
int i=0;
while (iterator.hasNext()){
if (i++==1
){
iterator.remove();
continue;
}
Integer next=iterator.next();
System.out.print(next+" ");
}
System.out.println();
}}