2012-12-15 2 views
0

좋아요, 질문이 있습니다. 코드가 제대로 작동하는 것처럼 보였습니다. 그러나 필자는 particuarly 잘 테스트하지 않았습니다.Java list set method

ArrayList에 요소를 설정하려고합니다.

ArrayList<StringBuilder> g=new ArrayList<StringBuilder>(); 
//set the array contents 
g.get(2).append("Something"); 

나는

StringBuilder q=g.get(2); 
q.append("something else?"); 
g.set(2,q); 

작품과 같은 일을하고, 그것을 할 수있는 올바른 방법이 아마 알고 있지만, 그 일을 같은 먼 길처럼 보인다.

나는이 일을 올바르게하고 있습니까, 그렇지 않다면 제가 유일한 방법을 언급 한 두 번째 방법입니까?

+0

동일한 StringBuilder를 목록에 다시 설정할 필요가 없으므로 아무 것도하지 않습니다. –

답변

1

StringBuilder의 목록이있는 경우 수정 된 첫 번째 방법이 좋습니다. 어떤 불변의 타입의리스트 (예 : String)가있는 경우, 꺼내는 오브젝트를 변경할 수 없기 때문에 결과가 같은 오브젝트가 아니기 때문에 두 번째 메소드의 변형을 사용해야합니다.

List<StringBuilder> widgets = new ArrayList<StringBuilder>(); 
// ... 
StringBuilder widget = widgets.get(0); 
widget.append(" version 2"); 

당신이 StringBuilder 인스턴스 목록 값을 초기화하는 경우

List<String> widgets = new ArrayList<String>(); 
// ... 
String widget = widgets.get(0); 
widgets.set(2, widget + " version 2"); 
+0

감사합니다. 실제로 StringBuilders에 대해 일반적으로 변경 가능한 항목 목록에서 항목을 수정하는 전반적인 방법에 대해 묻지는 않았습니다. – jaked122

+1

@ jaked122 그러면 질문에이 사실을 알려야합니다. –

+0

왜, stringbuilder 클래스는 java에서 특별한 처리를하지 않으므로, 이것에 대한 조언은 모든 클래스가 아닌 대부분의 클래스에서 작동합니다. – jaked122

0

g.get(2).append("Something"); 작품을 대. 그렇지 않으면 NullPointerException가 표시됩니다. 코드에서이 유형 StringBuilderArrayList 정의하지만 다음

+0

그래, 내가 작동하는 변경할 수있는 유형을 생각하고, 정수가 작동하지 않았으므로 부분적으로 StringBuilder로 코드를 변경했습니다. – jaked122

+0

두 방법 모두 목록이 초기화 된 경우에만 작동합니다. 그들은 두 번째 것이하고 불필요한 집합이하는 차이점과 똑같이 행동합니다. – SJuan76

1

당신이 검색하는 목록 # get 및() 메소드를 호출 할 때 작동하지 않는, 그것에 유형 IntegerArrayList를 할당하려고한다는

주 StringBuilder 객체에 대한 참조입니다. StringBuilder는 변경 가능한 객체입니다. 따라서 색인 2에서 StringBuilder의 내용을 수정하려는 경우 수정 한 후에 참조를 다시 설정할 필요가 없습니다. 따라서 다음 내용이면 충분합니다.

g.get(2).append("Something");