java - 返回类的副本

标签 java oop linked-list return

假设我有一个链接列表。

class LinkedList {
...
    private Node head;
    private int length;

    private class Node {
        Element element;
        Node next;
    }

    public LinkedList tail() { }
}

我将如何实现tail以便:

  1. 它返回 LinkedList,不带 Head 元素。
  2. 对原始 LinkedList 所做的任何更改都会反射(reflect)在 tail 返回的内容上

我尝试过的事情:

  // This fails because it creates a new LinkedList, and modifying 'this' won't affect the new LinkedList.
  public LinkedList tail() {
    LinkedList temp = new LinkedList();
    temp.head = this.head.next;
    temp.length = this.length - 1;
    return temp;
  }

  // This fails because it modifies the original LinkedList.
  public LinkedList tail() {
    LinkedList temp = this;
    temp.head = this.head.next;
    temp.length = this.length - 1;
    return temp;
  }

基本上,我需要 tail 指向 head.next

最佳答案

创建一个包含原始 LinkedList 的子类:

class TailList extends LinkedList {
  LinkedList list;
  TailList(LinkedList list) { this.list=list;}
  Node head() { return list.head().next; }
  int length() { return list.length()-1;}
}

当然你得先封装LinkedList中的字段。我实际上会将 LinkedList 变成一个接口(interface),将当前的 LinkedList 变成 LinkedListImplimplements LinkedList 并添加如上所述的 TailList。

class LinkedListImpl implements LinkedList{
  ...
  LinkedList tail(){ return new TailList(this); }
  ...
}

顺便说一句。我建议考虑不可变的数据结构......

关于java - 返回类的副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28316714/

相关文章:

java - 使用 Swing 从本地目录获取图像?

python - 如何用 python 方法返回一个新的类对象?

c++ - C++ 中的结构可以在内部包含函数吗?

c - Valgrind 创建链表数组时出错(用于哈希表链接)

java - 即使有退出条件,欧几里得树对象堆栈溢出错误

java - 升级到 ubuntu 14.04 后 Eclipse 上没有自动完成

java - 未发送订阅者的 Firebase 指数退避

c++ - lambda 可以代替 getter 吗?

c - 扫描输入到链表

java - 如何在不使用 LinkedList 方法的情况下设置列表中的元素