[解決済み] Javaで配列からオブジェクトを削除するには?
質問
の配列が与えられたとき n オブジェクトであるとします。 文字列の配列 で、以下のような値を持っているとします。
foo[0] = "a";
foo[1] = "cc";
foo[2] = "a";
foo[3] = "dd";
に等しい文字列/オブジェクトをすべて削除/除去するには、どうすればよいでしょうか? "a"です。 に等しい文字列やオブジェクトを削除する必要がありますか?
どのように解決するのですか?
[すぐに使えるコードが必要な場合は、私の "Edit3" までスクロールしてください (カット後)。残りは後世のためにここにあります]。
肉付けするために ダストマンのアイデア :
List<String> list = new ArrayList<String>(Arrays.asList(array));
list.removeAll(Arrays.asList("a"));
array = list.toArray(array);
編集:私は今
Arrays.asList
の代わりに
Collections.singleton
: シングルトンは一つのエントリに限定されるのに対して
asList
アプローチでは、後でフィルタリングするために他の文字列を追加することができます。
Arrays.asList("a", "b", "c")
.
Edit2: 上記の方法では、同じ配列が保持されます(つまり、配列は同じ長さのままです)。最後の要素より後の要素はnullに設定されます。もしあなたが 新しい という配列が必要な場合は、代わりにこれを使用します。
array = list.toArray(new String[0]);
Edit3: このコードを同じクラスで頻繁に使用する場合、このコードを追加することを検討するとよいでしょう。
private static final String[] EMPTY_STRING_ARRAY = new String[0];
すると、関数はこうなる。
List<String> list = new ArrayList<>();
Collections.addAll(list, array);
list.removeAll(Arrays.asList("a"));
array = list.toArray(EMPTY_STRING_ARRAY);
これにより、ヒープに無駄な空文字列の配列が散らばることがなくなります。
new
になるような無駄な空文字列をヒープに散らさないようになります。
cynicalmanの提案(コメント参照)もヒープの散乱を助けるでしょうし、公平を期すため、それに言及しておきます。
array = list.toArray(new String[list.size()]);
私は自分のアプローチの方が好きです。なぜなら、明示的なサイズを間違えやすいかもしれないからです (例えば
size()
を間違ったリストで呼び出すなど)。
関連
-
ジャバアレイ
-
Java基礎 - マッピングとQ/A
-
テストが空であるかどうかを判断するためのオプションの処理
-
CAS 5.1.8でhttpをサポートし、認証されていない認可サービスエラーのプロンプトが表示される問題を解決した。
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] 配列からArrayListを作成する
-
[解決済み] JavaScriptの配列で一意な値をすべて取得する(重複を排除する)。
-
[解決済み】オブジェクトの配列を文字列のプロパティ値でソートする
-
[解決済み】オブジェクトの配列をプロパティ値でソートする
-
[解決済み】JavaScriptで配列の要素を削除する - delete vs splice
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Eclipseは、ポップアップA Java Exception has occurred.を実行し、エラーException in threadの解決策を報告します。
-
実行中にEclipseがポップアップする A Java Exception has occurred
-
強制型変換について
-
SpringBoot 起動エラー java.nio.charset.MalformedInputException: 入力長 = 2 解決
-
セミコロン期待値エラー解決
-
API の戻り値を処理するために ResponseEntity を使用する
-
Server Tomcat v9.0 Server at localhost の起動に失敗しました。
-
Web Project JavaでPropertiesファイルを読み込むと、「指定されたファイルがシステムで見つかりません」というソリューションが表示されます。
-
Java JDKのダイナミックプロキシ(AOP)の使用と実装の原理分析
-
[解決済み] 配列から要素を削除する(Java) [重複]。