Nic*_*ner 0 java variables iterator pass-by-reference data-structures
Java不通过引用传递变量.在这种情况下,数据结构如何ListIterator更改其相应的列表?
这是我写的一个示例迭代器:
public class OdpIterator<E> implements ListIterator<E> {
private OdpList<E> list;
private int cursor;
public OdpIterator(OdpList<E> list) {
this.list = list;
}
@Override
public void add(E arg0) {
list.add(arg0);
}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试更改list时add(),它不会更改基础列表,因此以下测试失败:
OdpList<Integer> list = new OdpList<Integer>();
ListIterator<Integer> iter = list.listIterator();
iter.add(42);
assertTrue(list.contains(42));
Run Code Online (Sandbox Code Playgroud)
OdpList add:我认为它是正确的,因为它通过了它的单元测试.
@Override
public boolean add(E arg0) {
ListCell<E> cell = new ListCell<E>(arg0);
if (size() > 0) { //if something is already in the list
tail.setNext(cell);
tail = cell;
}
else {
head = cell;
tail = cell;
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
ListCell构造函数:
public class ListCell<T> {
public ListCell(T arg0) {
this.datum = arg0;
next = null;
}
}
Run Code Online (Sandbox Code Playgroud)
OdpList listIterator:
@Override
public ListIterator<E> listIterator() {
return new OdpIterator<E>(this);
}
Run Code Online (Sandbox Code Playgroud)
OdpList包含:
@Override
public boolean contains(Object arg0) {
return indexOf(arg0) == -1;
}
@Override
public int indexOf(Object arg0) {
return findAfter(head, arg0, 0);
}
private int findAfter(ListCell<E> o, Object search, int soFar) {
if (o == null) {
return -1;
}
if (o.getDatum() == null && search != null) {
return findAfter(o.getNext(), search, soFar + 1);
}
if ((o.getDatum() == null && search == null) || o.getDatum().equals(search)) {
return soFar;
}
return findAfter(o.getNext(), search, soFar + 1);
}
Run Code Online (Sandbox Code Playgroud)
我该怎么做呢?或者我误解了迭代器是如何工作的?
在人们经历过的所有心理锻炼之后,我几乎不愿意这样说,但是......问题只是一个错字.
@Override
public boolean contains(Object arg0) {
return indexOf(arg0) == -1;
}
Run Code Online (Sandbox Code Playgroud)
应该
@Override
public boolean contains(Object arg0) {
return indexOf(arg0) != -1;
}
Run Code Online (Sandbox Code Playgroud)
containstrue只有当对象不在列表中时才返回!
| 归档时间: |
|
| 查看次数: |
2942 次 |
| 最近记录: |