2016-09-08 5 views
2

"hello"と "world"という単語を保持するStringListの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は変更不可能なため、内の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 sが不変であることに注意してください。 Stringの内容を変更するときは、実際には何も追加していません。全く新しいStringを作成しています。

あなたString Sの内容が変化することが予想される場合には、賢明な方法ではなく、StringBuilderクラスを使用することです:

Documentation

のStringBuilderの主要操作がアペンド、挿入されています メソッドであり、どのタイプのデータでも受け入れるためにオーバーロードされます。各 は、与えられたデータを文字列に効果的に変換してから、 を付加して文字列ビルダにその文字列を挿入します。 appendメソッドは、ビルダーの最後に常にこれらの文字を追加します。 insertメソッドは、指定されたポイントに文字を追加します。

ここでは、コードです:

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); 
    } 
関連する問題