失语瑞萌萌
2018-12-09 11:08:36
ArrayList的具体实现,myArrayList
今天,复习了java 的容器框架,自己实现了个简单的myArrayList,包括get,set,add,remove,以及迭代器内部类的实现,自己敲了一遍,感觉不错,
我们知道,所有的容器类都是继承于Iterable接口的,实现该接口则必须提供一个Itrrator方法,用来返回一个迭代器对象,JDK中的Arraylist实现的是list接口,而list接口又继承于collection接口,collection继承于iterator接口,在这里,为了方便,就直接实现iterator接口了
package myarraylist; import java.util.Iterator; public class MyArrayList<T> implements Iterable<T> { private T[] items; // 维护的数组 private int size; // 数组所含元素的个数 private static final int DEFAULT_CAPACITY = 10;// 数组默认容量 // 构造方法 public MyArrayList() { doClear(); } public void clear() {// 清空数组 doClear(); } private void doClear() { this.size = 0; ensureCapacity(DEFAULT_CAPACITY); } private void ensureCapacity(int newCapacity) { // 扩容 if (newCapacity < size) return; T[] oldArr = items; this.items = (T[]) new Object[newCapacity]; if (oldArr != null) { for (int i = 0; i < size; i++) { items[i] = oldArr[i]; } } } public int size(){ return size; } public boolean isEmpty(){ return size == 0; } public T get(int index){ if(index >size || index <0) throw new RuntimeException("索引越界"); return items[index]; } public T set(int index,T t){ if(index >size || index <0) throw new RuntimeException("索引越界"); T old = items[index]; items[index] = t; return old; } public boolean add(T t){ add(size(),t); return true; } public void add(int index, T t) { //先判断容量 if(size() == items.length){ ensureCapacity(items.length * 2 +1); } //移动数组 for (int i = size()-1; i >= index; i--) { items[i+1] = items[i]; } items[index] = t; size++; } public void remove(int index){ for (int i = index; i < items.length-1; i++) { items[i] = items[i+1]; } size--; } public Iterator<T> iterator() { return new MyArrayListIterator(); } private class MyArrayListIterator implements Iterator<T>{ private int current = 0; //游标,初始指在零 @Override public boolean hasNext() { return current<size; } @Override public T next() { if(!hasNext()) throw new RuntimeException("数组越界,无法迭代"); return items[current++]; } public void remove(){ MyArrayList.this.remove(--current); } } }
提供的测试类
package myarraylist; import java.util.Iterator; public class Test { public static void main(String[] args) { MyArrayList<Integer> list = new MyArrayList<>(); for (int i = 0; i < 20; i++) { list.add(i); } Iterator<Integer> it = list.iterator(); while(it.hasNext()){ System.out.println(it.next()+“ ”); } } }
输出:0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
恩,没啥难的
评论
最近浏览
最代码官方 LV167
2018年12月9日