2014-10-14 4 views
0

우리 모두가 Java에서 알고있는 것처럼, 다음 예제와 같이 해당 객체에 대한 참조가있는 'everyone'객체도 변경됩니다.List <>가 변경되면 LIst <>에 대한 다른 모든 참조가 변경됩니까?

List<String> mainList = new ArrayList<String>(); 
mainList.add("a"); 
mainList.add("c"); 
mainList.add("b"); 
mainList.add("d"); 

System.out.println(Arrays.toString(mainList.toArray(new String[mainList.size()]))); // randomly ordered strings [a, c, b, d] 

List<String> referencedList = mainList;// referencedList contains the same unordered strings [a, c, b, d] 

Collections.sort(mainList);// mainList is sorted [a, b, c, d] 
System.out.println(Arrays.toString(referencedList.toArray(new String[ referencedList.size()]))); // the referenced list is also sorted 

배열하지만, ​​참조 된 배열의 모든 걸쳐 업데이트됩니다 내에서만 객체가 정렬되지 않은 유지하는 목록 <>을 얻을 수있는 방법이 있습니까?

+1

'List-> toArray-> toString' 콤보를 사용할 필요가 없습니다. '[element1, element2, ..., elementN]'형식으로 내용을 인쇄하려면'List' 자체에서'toString'을 사용하십시오. 따라서 System.out.println (Arrays.toString (mainList.toArray (new String [mainList.size()]));) 대신'System.out.println (mainList); – Pshemo

답변

2

마치 얕은 복제물을 원하는 것처럼 들립니다.

List<String> referencedStrings = new ArrayList<>(referencedStrings); 
기존 목록의 사본을 취할 것

- 그러나 목록 참조 만 들어 있으므로, 객체에 대한 변경은 이러한 참조가 두 목록을 통해 볼 수 있습니다 참조하십시오. (어쨌든 String 객체의 내용을 변경할 수는 없지만 ...)

0

코드의 문제점은 referencedList가 mainList와 같은 참조를 보유한다는 것입니다. 핵심은 mainList의 내용 사본을 만드는 것입니다.

은 동일한 참조를 개최한다

List<String> referencedList = new ArrayList<String>(); 
for(String s: mainList){ 
    referenced.add(s); 
} 
//sort mainList 

두 목록 같은 mainList을 반복 할 수 있지만 mainList가 정렬됩니다.

또는 Jon Skeet이 지적한대로 ArrayList (목록 목록) 생성자를 사용하십시오.

이제는 목록 자체 만 변경하고 내용은 변경하지 않기 때문에 mainList를 정렬 할 수 있습니다.

0

목록 요소를 정렬 할 필요가 없습니다. 아래 코드는 주 목록의 요소와 순서를 보여줍니다.

List<String> mainList = new ArrayList<String>(); 
mainList.add("a"); 
mainList.add("c"); 
mainList.add("b"); 
mainList.add("d"); 

// randomly ordered strings [a, c, b, d] 
System.out.println(Arrays.toString(mainList.toArray(new String[mainList.size()]))); 
// referencedList contains the same unordered strings [a, c, b, d] 
List<String> referencedList = mainList; 
// the referenced list is also sorted 
System.out.println(Arrays.toString(referencedList.toArray(new String[ referencedList.size()]))); 

감사합니다.

관련 문제