4

ArrayList長さが整数として渡された数値と等しい要素を から削除したいと考えています。私のコードは次のとおりです。実行すると、メソッドが使用されると、プログラムUnsupportedOperationExceptionは行をスローします。remove()実際には、それはコーディングバットの問題です。

public static List<String> wordsWithoutList(String[] words, int len) {    
    List<String> list = new ArrayList<String>();

    list = Arrays.asList(words);

    for(String str : list) {
        if(str.length() == len) {
            list.remove(str);
        }
    }
    return l;       
}
4

1 に答える 1

10

によって返されるリストは、asList変更ArrayListをサポートしていません。

あなたがする必要があります

public static List<String> wordsWithoutList(String[] words, int len) {

    List<String> l = new ArrayList<String>( Arrays.asList(words) );

    for( Iterator<String> iter = l.iterator(); iter.hasNext(); ){
        String str = iter.next();
        if(str.length()==len){
            iter.remove();
        }
    }
    return l;       
}

だから2つのこと:

  • コンストラクターasListを使用して返された配列の変更可能なコピーを作成します。ArrayList
  • イテレータを使用してremoveConcurrentModificationException.

これは非効率的である可能性があることが指摘されているため、より適切な代替手段は次のとおりです。

List<String> l = new ArrayList<String>(str.length());
                                   //  ^^ initial capacity optional
for( String str : words )
    if( str.length()!=len)
        l.add(str);

return l;
于 2012-04-23T07:07:58.417 に答える