【问题标题】:Change value of an element in a LinkedList in java在java中更改LinkedList中元素的值
【发布时间】:2014-10-19 07:17:03
【问题描述】:

我定义了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 中。我还需要遍历整个列表并更改列表中候选人的偏好。但是,我不知道如何访问列表中的元素。

基本上,我知道指向 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;
}

简而言之,我需要改变链表中元素的值,而不是改变元素本身。

【问题讨论】:

    标签: java list pointers linked-list listiterator


    【解决方案1】:

    itr.next()ListIteratorLinkedList 不会创建副本。

    public E next() {
        checkForComodification();
        if (nextIndex == size)
        throw new NoSuchElementException();
    
        lastReturned = next;
        next = next.next;
        nextIndex++;
        return lastReturned.element;
    }
    

    它返回对存储在列表中的Candidate 对象的引用。因此,您可以更新返回的Candidate,这将更新列表中的Candidate 对象。

    【讨论】:

    • 哦,谢谢!但是,如果我需要一个对象的副本(这样我就可以更改它的值,而不会干扰原始对象),我如何获得它
    • @code_enthu 如果您需要一个副本,您必须自己创建副本,方法是在您的 Candidate 类中实现和调用复制构造函数或 clone() 方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多