gpt4 book ai didi

java - 在java构造函数中传递 “this”

转载 作者:行者123 更新时间:2023-12-01 10:40:39 25 4
gpt4 key购买 nike

我试图理解 arrayList 和可迭代方法中的迭代器方法,我无法理解在“return new MyArrayListIterator(this);”中使用“this”,我知道如何使用“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);
}

}

最佳答案

return new MyArrayListIterator<T>(this);     

this 指的是 Iterable MyArrayList。您的方法应该在 MyArrayList 上返回一个 Iterator,因此调用

return this;

这是错误的。

关于java - 在java构造函数中传递 “this”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34432559/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com