
次のリストに入っている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ランキング
-
XML:連番要素の全ての子要素にx...
-
CPUの考え方を教えてください ...
-
Excel-VBAでXMLの複数ノードの...
-
Integerの範囲設定について
-
XMLで要素が記述された順番に意...
-
C# listviewでサブアイテムを順...
-
DOCTYPE宣言について
-
XSL中の改行、タブを無効にした...
-
DOSコマンドラインからxmlファ...
-
携帯サイト作成について
-
ツリービューの使い方が・・・
-
SNMP リンクダウンとノードダ...
-
エラーメッセジの意味が分かり...
-
ツリーでのアイコンの設定
-
XMLで特定の兄弟のノードの数を...
-
ルート要素ノードが2個ある場合?
-
エクセルVBA ウェブ上のボタ...
-
webAPIの提供方法はどんな方法...
-
isnan・isnf関数が「識別子が見...
-
googleのxmlサイトマップについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
HPビルダー2001で選んで流す。
-
XSLTの処理について
-
MFCでのタブコントロールに...
-
XMLSchemaの記述法で質問です。
-
XML:連番要素の全ての子要素にx...
-
[AWS] 取得したURLにスタイルシ...
-
XMLはなぜ普及したのか?
-
大規模行列の計算
-
getElementsByNameの要素数が取...
-
formタグと、imgObj.src[=strURL]
-
XPATHについて
-
XSLTの記述方法
-
DOMでの要素名の変更
-
ASP.NETでツリービューを作成し...
-
RSS2.0でitemが空の場合の記述
-
親子関係にない要素を限定して...
-
DTDについて
-
Webページに関するさまざまな情...
-
■XSLT■複数のノードを違う属性...
-
hana no namae osiete kudasai.
おすすめ情報