20 Stimmen

Wie filtert man ein Array in Java?

Wie kann ich ein Array in Java filtern?

Ich habe eine Reihe von Objekten, zum Beispiel Autos:

Klasse:

public class Car{
    public int doors;
    public Car(int d){
        this.doors = d;
    }
}

Verwendung:

Car [] cars = new Cars[4];
cars[0] = new Car(3);
cars[1] = new Car(2);
cars[2] = new Car(4);
cars[3] = new Car(6);

Jetzt möchte ich die Liste der Autos filtern und nur die 4-Türer und mehr behalten:

for(int i = 0; i<cars.length; i++){
    if(cars[i].doors > 4)
         //add cars[i] to a new array
    }
}

Wie soll ich das machen?

Vorher habe ich es mit einem Vector gemacht:

Vector subset = new Vector();
for(int i = 0; i<cars.length; i++){
    if(cars[i].doors > 4)
         //add cars[i] to a new array
        subset.addElement(cars[i]);
    }
}

Und dann würde ich ein neues Array mit der Größe des Vektors erstellen. Dann würde ich eine Schleife über den Vektor wieder und füllen Sie das neue Array. Ich weiß, dies ist ein sehr großes Verfahren für etwas Einfaches.

Ich verwende J2ME.

1voto

Porculus Punkte 1159

Es gibt keine direkte Möglichkeit, Elemente aus einem Array zu entfernen; seine Größe ist festgelegt. Was auch immer Sie tun, Sie müssen irgendwie ein neues Array zuweisen.

Wenn Sie den geringen Speicher-Overhead vermeiden wollen, der durch die Zuweisung einer Vector Eine andere Möglichkeit wäre, zwei Durchgänge über Ihr Array zu machen. Beim ersten Mal zählen Sie einfach die Anzahl der Elemente, die Sie behalten möchten. Dann ordnen Sie ein Array dieser Größe zu und gehen erneut in einer Schleife über Ihr altes Array, wobei Sie die passenden Elemente in das neue Array kopieren.

1voto

Bozho Punkte 570413

Sie müssen ohnehin ein neues Array erstellen.

Vector vector = new Vector(array.length);

for (int i = 0; i < array.length; i++) {
    if (array[i].doors > 4) {
        vector.add(array[i]);
    }
}

Car[] result = new Car[vector.size()];
vector.copyInto(result);

Dies ist jedoch nicht sehr effizient.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X