2014-10-19 2 views
0

Я определил связанный список объектов Candidate. Мне нужно сохранить начальный следующий элемент для каждого элемента (так как я буду менять порядок позже и потребую начальный порядок).Изменить значение элемента в LinkedList в java

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; 
} 

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

ответ

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 в списке.

+0

Ох спасибо! Но тогда, если мне нужна копия объекта (чтобы я мог изменить его значение, не нарушая исходный), как я могу получить это –

+0

@code_enthu Если вам нужна копия, вам нужно будет создать копию самостоятельно, путем реализации и вызова конструктора копирования или метода clone() в классе Candidate. – Eran

Смежные вопросы