我不知道任何现有的实现(不,我不认为普通的Java集合是侵入性的).
这可能是因为这个列表在Java中的唯一主要优点是当您已经有要删除的元素(并且在该位置没有迭代器)时,将快速的remove()调用.不复制的元素在Java中不是有效的参数,因为Java List实现仅处理引用(并且不会复制整个对象).
但是您可以通过创建必要的界面轻松地编写一个通用的List实现:
public interface IntrusiveListElement> {
public void setNext(E next);
public E getNext();
public void setPrev(E prev);
public E getPrev();
}
public class IntrusiveList> implements List {
// implement your run-of-the-mill double-linked list here
}
您的元素类可能如下所示:
public class MyBusinessElement implements IntrusiveListElement {
private MyBusinessElement prev;
private MyBusinessElement next;
public void setNext(MyBusinessElement next) {
this.next = next;
}
public MyBusinessElement getNext() {
return next;
}
public void setPrev(MyBusinessElement prev) {
this.prev = prev;
}
public MyBusinessElement getPrev() {
return prev;
}
}