gpt4 book ai didi

java - 实现 Iterator.remove()

转载 作者:行者123 更新时间:2023-12-02 13:42:18 25 4
gpt4 key购买 nike

我已经实现了一个通用的 CircularArrayRing,并且正在努力为其实现一个迭代器。我想知道迭代器的remove()方法是如何工作的。它是否必须实际修改环或返回其指定元素已被删除的副本?

import java.util.AbstractCollection;
import java.util.Iterator;
import java.util.NoSuchElementException;

public class CircularArrayRing<E> extends AbstractCollection<E> implements Ring<E>
{

private int elements;
private int front;
private E[] ring;

@SuppressWarnings("unchecked")
public CircularArrayRing()
{
ring = (E[]) new Object[10];
front = 0;
}

@SuppressWarnings("unchecked")
public CircularArrayRing(int size)
{
ring = (E[]) new Object[size];
front = 0;
}

@Override
public boolean add(E e)
{

ring[front] = e;
front++;

if(front == ring.length)
{
front = 0;
}

if(elements < ring.length)
{
elements++;
}

return false;
}

@Override
public Iterator<E> iterator()
{
return new RingIterator();
}

@Override
public int size()
{
return elements;
}

//returns the element at the specified position
//the last added element has index 0, the second most recent has index 1 etc
@Override
public E get(int index) throws IndexOutOfBoundsException
{
if(index > elements - 1 || index > ring.length - 1)
{
throw new IndexOutOfBoundsException();
}
else
{
if (index < front)
{
return ring[front - 1 - index];
}
else
{
return ring[ring.length + front - 1 - index];
}
}


}


@SuppressWarnings("rawtypes")
private class RingIterator implements Iterator<E>
{
private int currentIndex = 0;


// returns the next element in the iterator
@SuppressWarnings("unchecked")
@Override
public E next()
{
if(currentIndex > ring.length - 1)
{
throw new NoSuchElementException();
}


if (currentIndex < front)
{
return (E) ring[front - 1 - currentIndex++];
}
else
{
return (E) ring[ring.length + front - 1 - currentIndex++];


}

}


//checks if there is another element
@Override
public boolean hasNext()
{
if(currentIndex < elements )
{
return true;
}
else
{
return false;
}

}



public void remove()
{


}

}

}

最佳答案

Javadoc很清楚这一点:

您可以选择不实现该方法,在这种情况下您只需抛出 UnsupportedOperationException

如果实现它,则必须从底层集合中删除迭代器当前选择的元素。在以下没有选择元素的情况下,您将抛出 IllegalStateException:

  • 迭代器上的 next() 方法尚未被调用
  • 对于同一选定元素(第一次调用后已被删除),remove() 方法会被多次调用

关于java - 实现 Iterator.remove(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42678392/

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