ı试图理解arrayList中的迭代器方法,并且在迭代方法中无法理解使用“这个”里面的“”返回新的MyArrayListIterator(this);“”ı知道如何使用“这个”但是没有看到这种类型的“这个”之前。这是什么?
public class MyArrayList<T> implements Iterable<T> {
private static final int DEFAULT_CAPACITY = 10;
//private instance fields
private T [] m_objs;
private int m_curIndex;
//private non-static methods
private T[] allocate(int capacity)
{
T [] objs = (T[])new Object[capacity];
if (m_curIndex != 0)
for (int i = 0; i < m_curIndex; ++i)
objs[i] = m_objs[i];
return objs;
}
private class MyArrayListIterator<E> implements Iterator<E> {
private MyArrayList<E> m_mc;
private int m_curIndex;
private MyArrayListIterator(MyArrayList<E> mc)
{
m_mc = mc;
m_curIndex = -1;
}
public boolean hasNext()
{
return ++m_curIndex < m_mc.m_curIndex;
}
public E next()
{
return m_mc.m_objs[m_curIndex];
}
}
//public constructors
public MyArrayList()
{
m_objs = (T[])new Object[DEFAULT_CAPACITY];
}
public MyArrayList(int capacity)
{
if (capacity <= 0)
throw new IllegalArgumentException("Capacity must be non negative");
m_objs = (T[])new Object[capacity];
}
//getters
public int capacity() { return m_objs.length;}
public int size() { return m_curIndex;}
//public methods
public boolean add(T elem)
{
if (m_objs.length <= m_curIndex)
m_objs = allocate(m_objs.length * 2);
m_objs[m_curIndex++] = elem;
return true;
}
public void clear()
{
for (int i = 0; i < m_curIndex; ++i)
m_objs[i] = null;
m_curIndex = 0;
}
public void ensureCapacity(int minCapacity)
{
if (minCapacity <= 0 && minCapacity <= m_curIndex && m_objs.length > m_curIndex)
m_objs = allocate(m_curIndex);
else
m_objs = allocate(minCapacity);
}
public T get(int index)
{
if (index < 0 || index >= m_curIndex)
throw new IndexOutOfBoundsException("index overflow or underflow");
return m_objs[index];
}
public boolean isEmpty() { return m_curIndex == 0;}
public Iterator<T> iterator()
{
return new MyArrayListIterator<T>(this);
}
public T remove(int index)
{
if (index < 0 || index >= m_curIndex)
throw new IndexOutOfBoundsException("index overflow or underflow");
T oldElem = m_objs[index];
//TODO:
m_curIndex--;
return oldElem;
}
public void trimToSize()
{
int capacity = 0;
if (m_curIndex == 0)
capacity = DEFAULT_CAPACITY;
else
capacity = m_curIndex;
m_objs = allocate(capacity);
}
public T[] toArray()
{
return allocate(m_curIndex);
}
}
答案 0 :(得分:1)
return new MyArrayListIterator<T>(this);
this
是指Iterable
MyArrayList 。您的方法应在Iterator
上返回MyArrayList
,因此请调用
return this;
会错的。
答案 1 :(得分:0)
无论何时何时看到this
,它总是指向对象的当前实例。在这种情况下,它指向MyArrayListIterator<E>
public Iterator<T> iterator()
{
return new MyArrayListIterator<T>(this);
}
表示类型MyArrayListIterator
为Iterator
,使用构造函数this
表示构造函数
private MyArrayListIterator(MyArrayList<E> mc)
{
m_mc = mc;
m_curIndex = -1;
}