2012-10-31 6 views
1

내가 저장하므로 연결리스트 L라는 링크 된 목록을 가지고 말 :연결된 목록의 마지막 노드 또는 첫 번째 노드를 수정 하시겠습니까?

LinkedList <LinkedList<String>> L 

나는 L1 = L.getLast()가 나는 또한 말할 수 할 경우 마지막 목록 또는 로컬 인스턴스에 "뭔가"를 추가 L.getLast.add("something") 또는 L1.add("something")과 뜻 그 목록의?

+1

LinkedList L 당신이 그것을 시도 해 봤나 외부에 저장된 참조를 사용하지? – Sujay

답변

0

"해당 목록의 로컬 인스턴스"란 무엇입니까? 여기에 참조 유형을 다루고 있습니다. 바깥 쪽 목록에 저장된 내용은 이며 목록 인스턴스에 대해서는입니다. 마지막 요소를 가져 오면 참조의 사본을 얻을 수 있습니다. 개체에 어떻게 접근하는지는 중요하지 않습니다. 당신은 여전히 ​​그 단일 개체를 수정하고 있습니다.

당신은 그것이 LinkedList<LinkedList<String>>를 작성하여 필요 이상 더 복잡 귀하의 예제를 만든 적이 있지만 근본적으로 이것은 우리가 쉽게 StringBuilder으로 보여줄 수와 같은 문제 : 우리가했습니다, 다시

StringBuilder x = new StringBuilder(); 
StringBuilder y = x; // Copies the *reference*, not an object 
y.append("foo"); 
System.out.println(x); // Prints "foo" 

가 단일 StringBuilder 개체가 있고 xy 값은 동일한 개체에 대한 참조입니다. 수정 방법은 중요하지 않지만 수정 사항은 표시되지만 객체에 액세스 할 수는 있습니다.

또는 당신은 예를 들어 목록을 사용하려면 :

List<String> list1 = new ArrayList<String>(); 
List<String> list2 = list1; 
list1.add("help"); 
System.out.println(list2.size()); // Prints 1 

이 이해 자바에 매우 중요하다 - 모든 클래스는 같은 방식으로 작동합니다. 표현식의 값은 이 아니며 개체입니다. 항상 참조 또는 원시 값입니다.

0

L1과 l.getLast()는 모두 동일한 개체 (부모 링크 된 목록의 마지막)를 참조합니다.

L1.addLast ("something") 또는 l.getlast()를 사용할 수 있습니다. addlast ("something")는 마지막 목록에서 마지막에 "something"을 추가합니다.

1

마지막 목록 또는 해당 목록의 로컬 인스턴스에만 "무언가"를 추가 하시겠습니까?

두 개의 참조 (인스턴스가 아님)로 지정된 동일한 목록에 추가하기 때문에 코드 줄이 동일하게 작동합니다.

을 감안할 때

LinkedList <LinkedList<String>> L 

다음 두 개의 조각을 마지막 노드를 가리키는 (당신이 쓴 인스턴스를 호출되지 것)의 로컬 참조를 갖는

  • 정확히 같은 작동합니다.

    L1 = L.getLast() 
    
    L1.add("something") 
    
  • 로컬 참조를 가지고 있지만

    L.getLast.add("something") 
    
관련 문제