我定义了Candidate
个对象的链接列表。我需要为每个元素存储初始的下一个元素(因为我稍后会更改顺序,并且需要初始顺序)。
public class Candidate {
//data members
private String prefrence;
private Candidate next;
public void setNext(Candidate c){ next=c; }
//rest of the class body
}
在另一个课程中,我需要创建一个候选人列表(candidateList
),我必须在其中初始化它,
while(input) {
Candidate c = new Candidate(field[0], field[1], field[2], ...);
candidateList.add(c);
}
现在,我需要在c.next
中存储列表的下一个元素。我还需要迭代整个列表并更改列表中候选项的首选项。但是,我不知道如何访问列表中的元素。
基本上,我知道c ++等价物,指向Candidate
(ptr),ptr->datamember=abc;
的指针可以完成这项工作。但我是Java新手,无法在这里获得指针机制。我打算这样的事情:
ListIterator<Candidate> itr = candidateList.listIterator();
while(itr.hasNext()) {
Candidate c = itr.next(); //I am supposing this creates a copy while i need a reference
func(c.pref);
c.pref = abc;
c.next = def;
}
简而言之,我需要更改链接列表中元素的值,而不是更改元素本身。
答案 0 :(得分:1)
itr.next()
的{{1}}的{{1}}不会创建副本。
ListIterator
它返回对列表中存储的LinkedList
对象的引用。因此,您可以更新返回的public E next() {
checkForComodification();
if (nextIndex == size)
throw new NoSuchElementException();
lastReturned = next;
next = next.next;
nextIndex++;
return lastReturned.element;
}
,这将更新列表中的Candidate
对象。