2016-09-08 3 views
2

"hello"및 "world"라는 단어를 포함하는 String의 ArrayList가 있다고 가정합니다. 각각의 끝에 "java"라는 단어를 추가하고 싶습니다.반복 중에 ArrayList의 내용을 편집하는 방법

반복하면서 시도했지만 성공하지 못했습니다. 같은 방법을 제안 해주세요. 다른 방법으로, 다른 ArrayList를 만들고 내용을 복사하는 것이지만, 공간면에서 효율적이라고는 생각지 않습니다.

import java.util.ArrayList; 

public class EditArrayListInLoop { 
    public static void main(String[] args) { 
     ArrayList<String> arrayList = new ArrayList<String>(); 

     arrayList.add("hello"); 
     arrayList.add("world"); 

     /* This does not work */ 
     /*for(int i = 0;i<arrayList.size();i++) 
     { 
      arrayList.get(i) += "java"; 
     }*/ 

     ArrayList<String> arrayList2 = new ArrayList<String>(); 
     for(int i = 0;i<arrayList.size();i++) 
     { 
      String test = arrayList.get(i); 
      test += "java"; 
      arrayList2.add(test); 
     } 
     System.out.println(arrayList2); 
    } 
} 
+0

또한 http://stackoverflow.com/questions/4352885/how-do-i-update-the-element-at-a-certain-position-in-an-arraylist 참조 – Unknown

답변

8

test += "java";arrayList.get(i)에 의해 반환 된 String의 내용을 변경하지 않습니다. 새 String을 만듭니다. String은 변경할 수 없으므로 List 안에있는 String 개 개체를 변경할 수있는 방법이 없습니다. 새 String 개체로만 바꿀 수 있습니다. 난 당신이해야한다고 생각 https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html

1

당신이 찾고있는 : ArrayList의에

arrayList.set(i, arrayList.get(i) + "java"); 

더 많은 정보

사용 arrayList.set(index,newValue)List의 i 번째 요소를 대체하는 첫 번째 목록 만 조작하십시오. 다른 목록을 사용하는 것이 최적의 솔루션이 아닙니다.

다음은 코드입니다.

출력

[hellojava, worldjava] 

코드

import java.util.ArrayList; 

public class EditArrayListInLoop { 
    public static void main(String[] args) { 
     ArrayList<String> arrayList = new ArrayList<String>(); 

     arrayList.add("hello"); 
     arrayList.add("world"); 

     for(int i = 0;i<arrayList.size();i++) 
      arrayList.set(i, arrayList.get(i).concat("java")); 

     System.out.println(arrayList); 
    } 
} 

String의는 불변 있습니다. String의 내용을 변경할 때마다 실제로 장면 뒤에 아무 것도 추가하지 않습니다. 완전히 새로운 String을 작성 중입니다.

Documentation

StringBuilder 내에서 주요 작업이 APPEND 및 삽입 위치 : 당신의 String의의 내용이 변화가 예상되는 경우

는 다음 바람직 방법 대신 StringBuilder 클래스를 사용하는 것입니다 메서드는 모든 형식의 데이터를 받아들이도록 오버로드됩니다. 각 은 주어진 데이터를 효과적으로 문자열로 변환 한 다음 을 추가하여 문자열 작성기에 해당 문자열의 문자를 삽입합니다. append 메소드는 항상이 문자를 빌더 끝에 추가합니다. 삽입 메서드는 지정된 지점에 문자를 추가합니다.

여기에 코드입니다 :

import java.util.ArrayList; 

public class EditArrayListInLoop { 
    public static void main(String[] args) { 
     ArrayList<StringBuilder> arrayList = new ArrayList<StringBuilder>(); 

     arrayList.add(new StringBuilder("hello")); 
     arrayList.add(new StringBuilder("world")); 

     for(int i = 0;i<arrayList.size();i++) 
      arrayList.set(i, arrayList.get(i).append("java")); 

     System.out.println(arrayList); 
    } 
} 

P.S : 같은 동기화가 다음 필요가 StringBuffer 사용하는 것이 좋습니다됩니다.

4

:

for(int i = 0;i<arrayList.size();i++) 
{ 
    arrayList.set(i,arrayList.get(i)+"java"); 
} 
2

설정 방법을 사용해보세요.

ArrayList<String> arrayList = new ArrayList<String>(); 

    arrayList.add("hello"); 
    arrayList.add("world"); 

    for(int i = 0;i<arrayList.size();i++) 
    { 
     String str = arrayList.get(i); 
     arrayList.set(i, str + " java"); 
    } 

    for(int i = 0;i<arrayList.size();i++) 
    { 
     String str = arrayList.get(i); 
     System.out.println(str); 
    } 
관련 문제