Javaの配列から要素を削除する方法はありますか?配列から要素を削除する(Java)
答えて
あなたはコモンズLANGのArrayUtilsを使用することができます。
array = ArrayUtils.removeElement(array, element)
これに相当するGuavaはありますか? –
@Clive Guavaはコレクションでしか動作しないようです。 –
これも配列を縮小しますか? –
基本的なJava配列から要素を削除することはできません。代わりに、さまざまなコレクションとArrayListを見てください。
私は知っている、私はちょうどarraylistsかsthと美しい見える方法がほしいと思う。それのような、何かのヒント? – Tobias
+1:LinkedListを使用すると、人生はより簡単になります。 –
LinkedListはめったに良い考えではありません。 List intrrfaceはあなたにランダムアクセスを与えますが、LinkedListはO(1)の代わりにO(n)アクセス時間を与えます。 –
確かに、別の配列を作成します:)
ニース探しているソリューションは、最初の場所に代わりに、配列のリストを使用することです。
List.remove(index)
あなたは配列を使用するを持っている場合は、System.arraycopy
への2つの呼び出しが最も可能性の高い最速になります。
Foo[] result = new Foo[source.length - 1];
System.arraycopy(source, 0, result, 0, index);
if (source.length != index) {
System.arraycopy(source, index + 1, result, index, source.length - index - 1);
}
(Arrays.asList
も配列を使用するための良い候補であるが、remove
をサポートしていないようです。)
+1:LinkedListまたはArrayListを使用します。 –
使用ArrayList
:
alist.remove(1); //removes the element at position 1
私はあなたが使用を望みますjavaコレクション/ javaコモンコレクション! java.util.ArrayList内で
は、次のようなことを行うことができます。yourArrayList.remove(someObject);
yourArrayList.add(someObject);
Copyあなたの元の配列を別の配列に、削除される要素なし。
これを行う簡単な方法は、List、Set ...を使用してremove()メソッドを使用することです。
大丈夫、THXたくさん は今、私はこのようなSTHを使用します。
public static String[] removeElements(String[] input, String deleteMe) {
if (input != null) {
List<String> list = new ArrayList<String>(Arrays.asList(input));
for (int i = 0; i < list.size(); i++) {
if (list.get(i).equals(deleteMe)) {
list.remove(i);
}
}
return list.toArray(new String[0]);
} else {
return new String[0];
}
}
実際に配列をそのままにしておく必要がある場合は、空のリストを作成し、このようにするのではなく正しい要素で埋めてください。 – Nicolas
コレクションを使用することを提案したときに人々が念頭に置いていたことは、わかりませんが、いずれにせよ、それらのリストインデックスには注意が必要です。削除(try {"a"、 "b"、 "deleteMe"、 "deleteMe"、 "c"})の直後に要素をスキップしているようです。 –
最良の選択は、コレクションを使用することで、それが何らかの理由で出ている場合は、arraycopy
を使用します。これを使用して、わずかに異なるオフセットで同じ配列からコピーすることができます。
たとえば、次のようにコメントに応答して
public void removeElement(Object[] arr, int removedIdx) {
System.arraycopy(arr, removedIdx + 1, arr, removedIdx, arr.length - 1 - removedIdx);
}
編集:
それは別の良い方法ではない、それは本当に唯一の許容方法です。
コレクションを割り当てる(新しい配列を作成する)には、コレクション(arraycopyを使用してコレクションが行う)を削除してから、削除するたびにtoArrayを呼び出す(2番目の新しい配列を作成する)最適化の問題ではなく、犯罪的に悪いプログラミングです。
たとえば、アレイが100mbのRAMを占有しているとします。今度は反復して20の要素を削除したいと思っています。
は、私はあなたが大きな、またはあなたが削除された場合に、あなたが違っそれをコーディングしたい、一度に多く、私が修正したことを行っていないことを前提と知っている...それを
を試してみて誰かがそのような前提を作ったときのひどいコードです。
「削除」(すなわち、1つの要素だけ左に配列をシフトする)に続いて、最後の要素の複製が存在しないか?つまり、a.lengthは削除後も同じになるでしょうか?私はアイデアを嫌うと言っているわけではなく、ちょうどこれを認識する必要があります。 – Adamski
+1。これは私の目的のために働く。 (あなたのサンプルにあった小さな問題を修正しましたが、あなたが気にしないことを願っています) – Gunslinger47
はい、これは要素を左にシフトし、最後の要素がまだ存在します。 新しい配列を使用してコピーする必要があります。 – Reddy
あなたの質問はあまり明確ではありません。あなた自身の答えから、私は何をしようとするよりよく伝えることができます:
public static String[] removeElements(String[] input, String deleteMe) {
List result = new LinkedList();
for(String item : input)
if(!deleteMe.equals(item))
result.add(item);
return result.toArray(input);
}
NBを:これはテストされていません。エラーチェックは、読者の練習として残されています(inputまたはdeleteMeがnullの場合、IllegalArgumentExceptionがスローされます; nullリストの入力時に空のリストが意味をなさない場合)配列からヌル文字列を削除することは意味があるかもしれませんが、 LLあまりにも練習として残しておき、それはdeleteMeがnullの場合deleteMeに等しい呼び出そうとした場合、現在、それはNPEをスローします)私がここで行わ
選択肢:
を私がLinkedListのを使用。反復は速くなければなりません。リサイズを避けるか、多くの要素を削除するとリストが大きくなりすぎます。 ArrayListを使用して、初期サイズを入力の長さに設定することができます。それはおそらく大きな違いをもたらさないでしょう。
注意、あなたは 'List
ArrayUtils APIを使用すると、「いい感じの方法」で削除できます。これは、配列に対して多くの操作(remove、find、add、containsなど)を実装します。
私の人生はもっとシンプルになっています。
の質問がありました。コレクションAPIの使用がありません。低レベルの詳細、パフォーマンスの問題、または緩やかに結合されたSOA統合のいずれかを使用します。後で、それらをコレクションに変換し、それをビジネスロジックに渡すことはOKです。
低レベルの性能のものについては、forループなどによる即座で汚れた状態の混乱によって、通常はすでにわかりにくくなっています。その場合、コレクションと配列の間で前後に変換するのは面倒で、資源集中的でもあります。
ところで、TopCoder、誰ですか?常にそれらの配列パラメータ!だから、アリーナにいるときにそれらを処理できるように準備してください。
以下は私の問題の解釈とその解決方法です。機能性は、で与えられるものとは異なる。ビルKおよびjelovirt。また、要素が配列内にない場合は、正常に処理します。
希望に役立ちます!
public char[] remove(char[] symbols, char c)
{
for (int i = 0; i < symbols.length; i++)
{
if (symbols[i] == c)
{
char[] copy = new char[symbols.length-1];
System.arraycopy(symbols, 0, copy, 0, i);
System.arraycopy(symbols, i+1, copy, i, symbols.length-i-1);
return copy;
}
}
return symbols;
}
これは完全に動作しています。 – Reddy
OPとは異なる質問に答える回答が多すぎます。 –
いくつかのより多くの前提条件は、ビル・Kによって書かれたもののために必要と
Object[] newArray = new Object[src.length - 1];
if (i > 0){
System.arraycopy(src, 0, newArray, 0, i);
}
if (newArray.length > i){
System.arraycopy(src, i + 1, newArray, i, newArray.length - i);
}
return newArray;
あなたは、配列の長さを変更することはできませんdadinnができますが、インデックスがで保持している値を変更することができています新しい値をコピーして既存のインデックス番号に格納します。 1 = mike、2 = jeff // 10 = george 11はmikeを上書きします。
Object[] array = new Object[10];
int count=-1;
public void myFunction(String string) {
count++;
if(count == array.length) {
count = 0; // overwrite first
}
array[count] = string;
}
配列の長さを変更できないことは重要な点です。 –
- 1. 、配列から要素を削除
- 2. 配列matlabから要素を削除
- 3. C言語のParameterInfo配列から要素を削除する
- 4. 配列から特定の要素を削除する方法
- 5. 内部から要素を削除する配列プロトタイプ
- 6. C++で配列から要素を削除する
- 7. プリミティブ配列から要素を削除する
- 8. JSON配列から要素を削除するには
- 9. Rails:ハッシュの配列から要素を削除する
- 10. 複数の配列から要素を削除するcakephp
- 11. Pythonの配列から空の要素を削除する
- 12. 配列から要素を削除するRuby
- 13. 配列から要素を削除する - 配列インデックスをPHPで
- 14. mongodbの配列から要素を削除します
- 15. XML直列化配列からのラッパー要素の削除
- 16. 配列要素の配列要素をJavaで配列する
- 17. MongoDBの/ PHP:配列から要素を削除
- 18. 配列から要素のセットを削除すると、私は配列から最後の2つの要素を削除しようとしているC++
- 19. 動的配列要素の削除
- 20. 要素ポインタ(別名)で配列要素を削除
- 21. 配列から一致する要素の最初のインスタンスを削除する
- 22. 2つのnumpy配列から重複する要素を削除します
- 23. リストから要素を削除する
- 24. phpのオブジェクトの配列から要素を削除するには?
- 25. JS/Jquery - 配列から複数の要素をキーで削除する
- 26. 構造体へのポインタの配列から要素を削除する
- 27. mongodb配列から最初のn個の要素を削除するには?
- 28. Javaで2次元配列の要素を削除する方法は?
- 29. 多次元配列の親要素を削除しますか?
- 30. リンクリストから要素を削除するJAVA
質問が重複していても、他の質問の回答はすばらしいものでも美しいものでもありません。 それは配列をarraylistに(手作業で)変換します。 – f1v3