public interface List<E> { void add(E e); void remove(E e); void remove(int index); E indexOf(int index); int size(); void clear(); void set(int index,E e); int getIndex(E e); } import java.util.Arrays; import java.util.Iterator; /* 自定义集合类 * */ public class MyArrayList<E> implements List<E> { //存储集合元素的数组 private Object[] arr; //集合中元素的数量 private int size; public MyArrayList(){ arr = new Object[5]; } public MyArrayList(int capcity){ arr = new Object[capcity]; } private void checkIndex(int index){ if (index<0||index>=size){ throw new IndexOutOfBoundsException("下标越界了:"+index); } } @Override public void add(E e) { //检查是否扩容 if (size>=arr.length){ arr= Arrays.copyOf(arr,arr.length*2); } //数据添加到集合内size数量+1 arr[size++]=e; } @Override public void remove(E e) { int index=getIndex(e); if (index==-1){ throw new UnsupportedOperationException("没有此元素,不能删除"); } remove(index); } @Override public void remove(int index) { checkIndex(index); System.arraycopy(arr,index+1,arr,index,size-index-1); arr[--size]=null; } @Override public E indexOf(int index) { checkIndex(index); return (E) arr[index]; } @Override public int size() { return size; } @Override public void clear() { Object[] newArr=new Object[5]; arr=newArr; } @Override public void set(int index, E e) { checkIndex(index); arr[index]=e; } @Override public int getIndex(E e) { //如果是null,采用==比较 if (e==null){ for (int i = 0; i < size; i++) { if (e==arr[i]){ return i; } } }else { //不是null,就采用equals()比较 for (int i = 0; i < size; i++) { if (e.equals(arr[i])){ return i; } } } return -1; } @Override public String toString(){ StringBuffer sbf= new StringBuffer("["); for (int i = 0; i <size ; i++) { if (i<size-1){ sbf.append(arr[i]+","); }else { sbf.append(arr[i]+"]"); } } return sbf.toString(); } public Iterator<E> iterator(){ return new Itr(); } private class Itr implements Iterator<E>{ private int cursor; @Override public boolean hasNext() { return cursor!=size; } @Override public E next() { return (E) arr[cursor++]; } } } import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; public class Demo5 { public static void main(String[] args) { MyArrayList<String> l = new MyArrayList<>(); l.add("贾代化"); l.add("贾代善"); l.add(null); System.out.println(l.size()); System.out.println(l.toString()); System.out.println(l.getIndex("贾代善")); System.out.println(l.getIndex(null));//2 l.remove(1); System.out.println(l.toString());//[贾代化,null] l.remove(null); System.out.println(l.toString());//[贾代化] l.add("贾敬"); l.add("贾珍"); l.add("贾蓉"); System.out.println(l.indexOf(1));//贾敬 l.set(1,"贾敷"); System.out.println(l.toString());//[贾代化,贾敷,贾珍,贾蓉] //遍历 Iterator<String> iterator = l.iterator(); while (iterator.hasNext()){ String ele=iterator.next(); System.out.println(ele); } } }