Hier gibt es viele Antworten - das Problem ist meines Erachtens, dass Sie nicht gesagt haben, WARUM Sie ein Array anstelle einer Sammlung verwenden. Lassen Sie mich daher einige Gründe vorschlagen und welche Lösungen zutreffen würden (die meisten Lösungen) wurden hier bereits in anderen Fragen beantwortet, damit ich nicht zu sehr ins Detail gehe):
Grund: Sie wussten nicht, dass das Sammlungspaket vorhanden ist, oder haben ihm nicht vertraut
Lösung: Verwenden Sie eine Sammlung.
Wenn Sie in der Mitte hinzufügen / löschen möchten, verwenden Sie eine LinkedList. Wenn Sie sich wirklich Sorgen um die Größe machen oder häufig mitten in der Sammlung indizieren, verwenden Sie eine ArrayList. Beide sollten Löschvorgänge haben.
Grund: Sie sind besorgt über die Größe oder möchten die Speicherzuweisung steuern
Lösung: Verwenden Sie eine ArrayList mit einer bestimmten Anfangsgröße.
Eine ArrayList ist einfach ein Array, das sich selbst erweitern kann, dies muss jedoch nicht immer der Fall sein. Das Hinzufügen / Entfernen von Elementen ist sehr klug. Wenn Sie jedoch eine Menge in der Mitte einfügen / entfernen, verwenden Sie eine LinkedList.
Grund: Sie haben ein Array, das hereinkommt und ein Array, das ausgeht. Sie möchten also ein Array bearbeiten
Lösung: Konvertieren Sie es in eine ArrayList, löschen Sie das Element und konvertieren Sie es zurück
Grund: Sie denken, Sie können besseren Code schreiben, wenn Sie es selbst tun
Lösung: Sie können kein Array oder keine verknüpfte Liste verwenden.
Grund: Dies ist eine Klassenzuweisung und Sie sind nicht erlaubt oder Sie haben aus irgendeinem Grund keinen Zugriff auf die Sammlungs-APIs
Annahme: Das neue Array muss die richtige "Größe" haben.
Lösung: Scannen Sie das Array nach passenden Elementen und zählen Sie diese. Erstellen Sie ein neues Array mit der richtigen Größe (Originalgröße - Anzahl der Übereinstimmungen). Verwenden Sie System.arraycopy wiederholt, um jede Gruppe von Elementen, die Sie behalten möchten, in Ihr neues Array zu kopieren. Wenn dies eine Klassenzuweisung ist und Sie System.arraycopy nicht verwenden können, kopieren Sie sie einfach einzeln von Hand in einer Schleife, aber tun Sie dies niemals im Produktionscode, da dies viel langsamer ist. (Diese Lösungen werden beide in anderen Antworten detailliert beschrieben.)
Grund: Sie müssen Bare Metal laufen lassen
Annahme: Sie dürfen nicht unnötig Speicherplatz zuweisen oder zu lange dauern
Annahme: Sie verfolgen die im Array verwendete Größe (Länge) separat, da Sie sonst Ihr Array für Löschungen / Einfügungen neu zuweisen müssten.
Ein Beispiel dafür, warum Sie dies tun möchten: Ein einzelnes Array von Grundelementen (sagen wir int-Werte) nimmt einen erheblichen Teil Ihres RAMs ein - wie 50%! Eine ArrayList würde diese in eine Liste von Zeigern auf Integer-Objekte zwingen, die ein paar Mal so viel Speicher benötigen würden.
Lösung: Durchlaufen Sie Ihr Array. Wenn Sie ein zu entfernendes Element finden (nennen wir es Element n), kopieren Sie mit System.arraycopy das Ende des Arrays über das "gelöschte" Element (Quelle und Ziel sind dasselbe Array) ist klug genug, um die Kopie in die richtige Richtung zu erstellen, damit sich der Speicher nicht selbst überschreibt:
Systemarraycopy (ary, n + 1, ary, n, Länge-n)
Länge--;
Sie möchten wahrscheinlich schlauer sein, wenn Sie mehr als ein Element gleichzeitig löschen. Sie würden nur den Bereich zwischen einem "Match" und dem nächsten verschieben und nicht den gesamten Schwanz. Vermeiden Sie wie immer, einen Block zweimal zu verschieben.
In diesem letzten Fall müssen Sie die Arbeit unbedingt selbst erledigen, und die Verwendung von System.arraycopy ist wirklich die einzige Möglichkeit, da dies die bestmögliche Methode zum Verschieben des Speichers für Ihre Computerarchitektur ist - sie sollte um ein Vielfaches schneller sein als jeder Code, den Sie vernünftigerweise selbst schreiben könnten.