Ich muss zwei Dateien verketten String
Arrays in Java.
void f(String[] first, String[] second) {
String[] both = ???
}
Wie lässt sich dies am einfachsten bewerkstelligen?
Ich muss zwei Dateien verketten String
Arrays in Java.
void f(String[] first, String[] second) {
String[] both = ???
}
Wie lässt sich dies am einfachsten bewerkstelligen?
Sie können die beiden Arrays in zwei Codezeilen aneinanderhängen.
String[] both = Arrays.copyOf(first, first.length + second.length);
System.arraycopy(second, 0, both, first.length, second.length);
Dies ist eine schnelle und effiziente Lösung und funktioniert auch für primitive Typen, da die beiden beteiligten Methoden überladen sind.
Sie sollten Lösungen vermeiden, die ArrayLists, Streams usw. beinhalten, da diese temporären Speicher für keinen sinnvollen Zweck zuweisen müssen.
Sie sollten vermeiden for
Schleifen für große Arrays, da diese nicht effizient sind. Die eingebauten Methoden verwenden Block-Kopierfunktionen, die extrem schnell sind.
Eine Lösung 100% altes Java y ohne System.arraycopy
(nicht verfügbar in GWT-Client zum Beispiel):
static String[] concat(String[]... arrays) {
int length = 0;
for (String[] array : arrays) {
length += array.length;
}
String[] result = new String[length];
int pos = 0;
for (String[] array : arrays) {
for (String element : array) {
result[pos] = element;
pos++;
}
}
return result;
}
Ich hatte in letzter Zeit Probleme mit übermäßiger Speicherrotation. Wenn a und/oder b bekanntermaßen häufig leer sind, ist hier eine weitere Anpassung des Codes von silvertab (ebenfalls generiert):
private static <T> T[] concatOrReturnSame(T[] a, T[] b) {
final int alen = a.length;
final int blen = b.length;
if (alen == 0) {
return b;
}
if (blen == 0) {
return a;
}
final T[] result = (T[]) java.lang.reflect.Array.
newInstance(a.getClass().getComponentType(), alen + blen);
System.arraycopy(a, 0, result, 0, alen);
System.arraycopy(b, 0, result, alen, blen);
return result;
}
Edit: Eine frühere Version dieses Beitrags besagte, dass die Wiederverwendung von Arrays wie diese klar dokumentiert werden sollte. Wie Maarten in den Kommentaren anmerkt, wäre es im Allgemeinen besser, die if-Anweisungen einfach zu entfernen, wodurch die Notwendigkeit einer Dokumentation entfiele. Aber andererseits waren diese if-Anweisungen der eigentliche Grund für diese spezielle Optimierung. Ich lasse die Antwort hier stehen, aber seien Sie auf der Hut!
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.