2014-10-19 2 views
0

Candidate 개체의 연결 목록을 정의했습니다. 모든 요소에 대해 초기 다음 요소를 저장해야합니다 (나중에 순서를 변경하고 초기 순서가 필요하기 때문에). 내가 초기화 할 필요가 후보 목록 (candidateList)을 만들 필요가 별도의 클래스에서 자바에서 LinkedList의 요소 값 변경

public class Candidate { 
    //data members 
    private String prefrence; 
    private Candidate next; 
    public void setNext(Candidate c){ next=c; } 
    //rest of the class body 
} 

,

while(input) { 
    Candidate c = new Candidate(field[0], field[1], field[2], ...); 
    candidateList.add(c); 
} 

는 지금, 나는 c.next에서리스트의 다음의 요소를 저장해야합니다. 또한 전체 목록을 반복하고 목록에서 후보의 기본 설정을 변경해야합니다. 그러나 목록의 요소에 액세스하는 방법을 모르겠습니다.

기본적으로 나는 Candidate (ptr)에 대한 포인터 인 ptr->datamember=abc;이 작업을 수행하는 C++ 동등한 기능을 알고 있습니다. 그러나 나는 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() 은 사본을 만들지 않습니다.

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() 메서드를 구현하고 호출합니다. – Eran