java - Java中如何引用一个引用?

标签 java pointers reference

我正在尝试通过自定义迭代器从数组中删除一个元素,并且我需要从数组中删除一个元素。我知道使用数组不太实用,但由于某些原因我有一些限制。

问题是我无法使用已删除的元素创建另一个数组并更改引用。因为我在定制的迭代器类中没有真正的引用。我需要改变真正的引用。让我用代码更好地解释这一点:

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++ 中有一个实现,并且正在寻找类似指向指针的指针的东西。

提前谢谢您。

最佳答案

您的示例中已经出现这种情况...

设置bufferarr ,允许创建对堆中同一数组的引用的副本,其中包含所有元素的相同引用。

但事实上,如果你想删除元素,你不应该以这种方式使用数组。

您只需使用同类元素的列表即可。

更改您的实现,以使用List<E>而不是数组,您将能够对其调用删除方法,并对原始传递的列表实例产生影响。

关于java - Java中如何引用一个引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54188227/

相关文章:

递归数组的 PHP 奇怪行为

java - 两个 Android 设备之间的蓝牙数据传输

java - Java中的SVG文件解析问题

Java:格式说明符 %x 和 %h 有什么区别?

c - 了解指针。 *((char **) 等于什么?

c++ - 为什么当构造函数引用字符串时无法正确打印?

java - 无法使 Ajax 与 Struts/Spring 一起工作

c - 与 C 不兼容的指针类型

C++:为什么我的函数返回的引用地址与取消引用的指针地址不同?

perl - 我如何在 Perl 中定义匿名标量引用?