【Java】List操作時にエラー「UnsupportedOperationException」が発生

エラー「UnsupportedOperationException」が発生

 * 以下のように、Arrays.asList で作った List に対して add した際に
   エラー「UnsupportedOperationException」が発生する

エラー発生時

SampleArray.java

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class SampleArray {
   public static void main(String[] args) {
      String[] arrays = new String[] {"aaa", "bbb", "ccc"};
      List<String> lists = new ArrayList<String>(Arrays.asList(arrays));
      lists.add("ddd");
      System.out.println(lists.size());
   }
}

表示

Exception in thread "main" java.lang.UnsupportedOperationException
        at java.util.AbstractList.add(Unknown source)
        at java.util.AbstractList.add(Unknown source)
        at SampleArray.main(SampleArray.java:9)

原因

 * Arrays.asList()使うと固定長のListが返ってくるため、addして最大長を溢れるため


解決策

 * Arrays.asList()を使わずに、newしてから後からaddAllで追加する

OK動作時

SampleArray.java

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class SampleArray {
   public static void main(String[] args) {
      String[] arrays = new String[] {"aaa", "bbb", "ccc"};
      List<String> lists = new ArrayList<String>();
      lists.addAll(Arrays.asList(arrays));
      lists.add("ddd");
      System.out.println(lists.size());
   }
}

表示

4

メモ

 * 1.8だと発生しない?


関連記事

コレクション ~ List 編~

http://blogs.yahoo.co.jp/dk521123/32156111.html