我正在尝试通过自定义迭代器从数组中删除一个元素,并且我需要从数组中删除一个元素。我知道使用数组不太实用,但由于某些原因我有一些限制。
问题是我无法使用已删除的元素创建另一个数组并更改引用。因为我在定制的迭代器类中没有真正的引用。我需要改变真正的引用。让我用代码更好地解释这一点:
public class Iterator<E>
{
private E[] buffer; // underlying buffer.
private int idx; // location of iterator in buffer.
private E last_element; // last element returned by this iterator.
public Iterator(E[] arr)
{
buffer = arr;
idx = 0;
}
/**
* Removes from the underlying collection the last element returned
* by this iterator.
*/
public void remove()
{
...
}
}
我可以通过删除指定元素来创建缓冲区的副本,并将缓冲区引用更改为该元素。但我希望这个删除能够影响真正的数组。所以我 实际上需要改变arr[]。
我再次知道,在拥有集合层次结构时,数组的整个使用是毫无意义的,但我需要一种以这种方式实现这一点的方法。在这种情况下,对引用的引用并不是一个好的术语,但我在 C++ 中有一个实现,并且正在寻找类似指向指针的指针的东西。
提前谢谢您。
最佳答案
您的示例中已经出现这种情况...
设置buffer
至arr
,允许创建对堆中同一数组的引用的副本,其中包含所有元素的相同引用。
但事实上,如果你想删除元素,你不应该以这种方式使用数组。
您只需使用同类元素的列表即可。
更改您的实现,以使用List<E>
而不是数组,您将能够对其调用删除方法,并对原始传递的列表实例产生影响。
关于java - Java中如何引用一个引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54188227/