返回类的副本



假设我有一个链表。

class LinkedList {
...
    private Node head;
    private int length;
    private class Node {
        Element element;
        Node next;
    }
    public LinkedList tail() { }
}

我将如何实现tail以便:

  1. 它返回不带Head元素的LinkedList
  2. 对原始LinkedList所做的任何更改都会反映在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 变成一个接口,把你当前的 LinkedList 变成 LinkedListImpl 实现 LinkedList 并添加 TailList,如上所述。

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

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

相关内容

  • 没有找到相关文章

最新更新