Изменить значение элемента в LinkedList в java

Я определил связанный список из 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;
}

Короче говоря, мне нужно изменить значение элементов в связанном списке, а не сам элемент.


person code_enthu    schedule 19.10.2014    source источник


Ответы (1)


itr.next() из ListIterator из LinkedList не создает копию.

public E next() {
    checkForComodification();
    if (nextIndex == size)
    throw new NoSuchElementException();

    lastReturned = next;
    next = next.next;
    nextIndex++;
    return lastReturned.element;
}

Он возвращает ссылку на объект Candidate, хранящийся в списке. Поэтому вы можете обновить возвращенный Candidate, который обновит объект Candidate в списке.

person Eran    schedule 19.10.2014
comment
ой ну спасибо! Но тогда, если мне нужна копия объекта (чтобы я мог изменить его значение, не нарушая оригинал), как мне получить это - person code_enthu; 19.10.2014
comment
@code_enthu Если вам нужна копия, вам придется создать ее самостоятельно, внедрив и вызвав конструктор копирования или метод clone() в вашем классе Candidate. - person Eran; 19.10.2014