
次のリストに入っている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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Googleログインボタンのデザイ...
-
googleスプレッドシートのスク...
-
jdbcでinsert,delete,createをe...
-
プログラミングの問題です。大...
-
配列にnullを代入すると、null...
-
JDONWROADER2のエラー修復
-
スプレッドシートからリマイン...
-
googleスプレッドシートのGASに...
-
Verilogについて質問です。この...
-
論理回路設計をVerilogで行う問...
-
ゲーム開発の入門書を探しています
-
session,requestはjspで未定義...
-
サーブレットをapacheで公開す...
-
下記のリストならno002が含まれ...
-
is this even a thing?
-
JAの支部?地域の農協のカード...
-
えハミルトン路と全域木のちが...
-
CSV出力を画面から選択したデー...
-
ショートカットキーについて
-
list の空は [] ってあわらすのに
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ASP.NETでツリービューを作成し...
-
head要素
-
Webページに関するさまざまな情...
-
element of surprise
-
XMLウインドウ表示時のエラー
-
使用しない要素を無視するには...
-
2つの行動の違い
-
XMLはなぜ普及したのか?
-
XMLSchemaの記述法で質問です。
-
getElementsByNameの要素数が取...
-
CPUの考え方を教えてください ...
-
ルート要素ノードが2個ある場合?
-
SNMP リンクダウンとノードダ...
-
東芝のDynabookなのですがアン...
-
XMLで要素が記述された順番に意...
-
XML、XSLTの適応エラー(IEから...
-
C#でTreeViewのCheckBoxのサイ...
-
xmlファイルが上手にHTMLに変換...
-
昔Winnyってありましたけど、あ...
-
バッチファイルでテキストファ...
おすすめ情報