次のリストに入っているnull要素を削除する方法をお教え下さい。
List<String> lst = new ArrayList<String>();
while (lst.remove(null));
や
for (int i=0; i < lst.size();i++) {
if (lst.get(i) == null ) lst.remove(i);
}
ではException in thread "main" java.lang.UnsupportedOperationException
が起こります。
2011 Nov. 27.
No.1ベストアンサー
- 回答日時:
実際に試してみましたが、lst.remove(null)やlst.remove(i)で問題なくnullをList<String>から削除できますよ。
for (int i=0; i < lst.size();i++) { ... }のほうは、lstにnullが連続して入っていた場合に期待したとおりに動かないと思いますが。
salsberry様、ありがとうございます。
今まで見ていたプログラムの中では質問のとおりなのですが、別に書いて試してみたら頂いた回答のとおりの動きです。
悲しいかな、今まで見ていたプログラムのどこが違うのかがわからない状況です。
2011 Nov. 28.
No.5
- 回答日時:
いいえ Arrays.asList で作成したリストはその状態では Iterator にしたところで削除は不可能です。
実際うちがおもったのは。
https://ideone.com/eHRHK
の動作
No.4
- 回答日時:
No3回答者です。
前回回答に間違いがったので、訂正「終端条件を再計算しない」→ 自分がチェックするとき、終端に定数を入れてしまってただけでした。lst.size() なら判定の度に現在数を数えます。(他の言語と勘違いもしてたせい)。
あと、jdk1.5 では list.remove(null) は、JREのversion によっては、Unsupported が発生します。たぶん引数の型が不明となるからじゃないでしょうか。型を明示されてる変数で中身がnullなのはとおりますし。
昨日vistaで実行テストしてたんだけど、たしか新しいversionのはず(今ちょっと確認できず)で、ご質問と同様のエラー出たけど、古いjre1.5.0のままのxpの方で実行してみたらエラーになりませんでした。eclipseの設定違いの可能性もあるけど、一応そういうこともあるので、型宣言されてる変数で入れた方がベターのようです。
No.3
- 回答日時:
ArrayList の要素番号って、途中を削除したら、番号ふり直して詰め込まれるんじゃなかったかな?
for構文で先頭から検索して途中削除すると、要素数が変わるが、javaでは、終端条件を再計算しないので、要素がすでに無い(null要素ではなくて、要素番号がない)番号にアクセスしてしまうので、
Exception in thread "main" java.lang.IndexOutOfBoundsException:
になる。
また、削除直後の要素は、番号が一つ減ってるので次のiでは、さらにその次にあった要素にマッチしてしまう、つまりnull連続の時に取りこぼす。
よって、後ろから検索して削除するのがよい(i=lst.size()-1; i>=0; i--)
mpro-gram様、ありがとうございます。
今まで見ていたプログラムの中では質問のとおりなのですが、別に書いて試してみたらforループでnull要素を削除できました。
いじっているプログラムの問題がわからない状態となりましたので、とりあえずお礼までとなります。
詳しい解説をありがとうございます。
2011 Nov. 28.
No.2
- 回答日時:
エスパー的感で
リストの作り方は Arrays#asList(E[]) では
要素の更新がUnsupportedOperationExceptionとなるはずです。
リストからデータを削除する場合、
イテレーターにしてからイテレーターで削除してください。
alice_asahina様、ありがとうございます。
当該のlstは、別のクラスの中でaddメソッドで要素を入れ、クラスの返り値としてもらっているものです。これはArrays#asList(E[])での作成とは異なるかと思います。
Arrays#asList(E[])で作ったリストでもイテレータで削除できるのですね。勉強になりました。
2011 Nov. 28.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- FX・外国為替取引 mql4のコンパイルエラー箇所の修正お願いします。 1 2023/03/15 16:14
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 3 2022/10/27 17:44
- C言語・C++・C# C++初心者です stirng 2 2022/09/20 20:43
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ASP.NETでツリービューを作成し...
-
Listからのnull要素を削除方法は?
-
東芝のDynabookなのですがアン...
-
コンテキストメニュークリック...
-
特殊記号が勝手にエスケープさ...
-
<xsl:key>とtopreceding-siblin...
-
UTF-8でエンコーディングとはど...
-
SNMP リンクダウンとノードダ...
-
【アプリ開発】日本語を含むXML...
-
Visual Basic .NET の識別子は...
-
ツリービューを閉じさせたくない。
-
C言語:文字列の並び替え
-
複数のxmlファイルの合体
-
XSLTでの正規表現判定
-
XML、XSLTの適応エラー(IEから...
-
XMLで要素が記述された順番に意...
-
XMLで特殊文字を扱うにはどうし...
-
Access VBAでXMLが読み込めない
-
translateの応用?文字の置換
-
Math.sqrt(Math.pow(canvas.wid...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
head要素
-
2つの行動の違い
-
Webページに関するさまざまな情...
-
getElementsByNameの要素数が取...
-
ASP.NETでツリービューを作成し...
-
使用しない要素を無視するには...
-
DOMでの要素名の変更
-
Listからのnull要素を削除方法は?
-
■XSLT■複数のノードを違う属性...
-
MFCでのタブコントロールに...
-
svgをhtmlに埋め込んで使いたい
-
hana no namae osiete kudasai.
-
element of surprise
-
XML:連番要素の全ての子要素にx...
-
VB2005でXMLデータから複数ある...
-
cssで外部ファイルを読み込む
-
XSLTの処理について
-
大規模行列の計算
-
次の要素の値取得
-
フロートってなに?
おすすめ情報