我需要构造并返回一个新的Q,其中包含该Q的第二个“一半”。
我要完成的事情的例子
类Q使用Java类库中的LinkedList类实现队列ADT。下面的Q类
import java.util.LinkedList;
public class Q {
// all Q objects have the same default capacity...
private final static int DFLT_CAPACITY = 4;
// every Q object has the following instance variables...
private LinkedList<Object> ll;
private int capacity;
/**
* Constructs an empty Q having DFLT_CAPACITY.
*/
public Q() {
this(DFLT_CAPACITY);
}
/**
* Constructs an empty Q having client supplied capacity.
*
* @param capacity switched to DFLT_CAPACITY if less than one
*/
public Q(int c) {
capacity = c < 1 ? DFLT_CAPACITY : c;
ll = new LinkedList<Object>();
}
我的问题是我需要返回一个Q对象,但是我有一个LinkedList。我知道这种尝试是完全有缺陷的,但是我已经被卡住了一段时间了。
public Q split() {
int split = ll.size() / 2;
for (int i = 0; i < split; i++) {
ll.remove(i);
}
Q newQ = (Q) ll.clone();
return newQ;
}
答案 0 :(得分:1)
使用LinkedList
的{{3}}方法。
注意: 阅读上面链接的javadoc,以了解其工作原理!
您还需要一个新的(私有)构造函数来创建新的Q对象。
以下内容假设现有的Q对象的capacity
保持不变,并且新的Q对象“继承”了相同的容量。
private Q(int c, LinkedList<Object> ll) {
this.capacity = c;
this.ll = ll;
}
public Q split() {
List<Object> secondHalf = this.ll.subList(this.ll.size() / 2, this.ll.size());
Q newQ = new Q(this.capacity, new LinkedList<>(secondHalf));
secondHalf.clear();
return newQ;
}