Wenn Sie mit Raw-Arrays arbeiten müssen und nicht, ArrayList
dann Arrays
haben Sie das, was Sie brauchen. Wenn Sie sich den Quellcode ansehen, sind dies die absolut besten Möglichkeiten, um eine Kopie eines Arrays zu erhalten. Sie haben ein gutes Stück defensiver Programmierung, da die System.arraycopy()
Methode viele ungeprüfte Ausnahmen auslöst, wenn Sie unlogische Parameter eingeben.
Sie können entweder verwenden Arrays.copyOf()
, um vom ersten zum Nth
Element in das neue kürzere Array zu kopieren .
public static <T> T[] copyOf(T[] original, int newLength)
Kopiert das angegebene Array, schneidet es ab oder füllt es mit Nullen (falls erforderlich), damit die Kopie die angegebene Länge hat. Für alle Indizes, die sowohl im ursprünglichen Array als auch in der Kopie gültig sind, enthalten die beiden Arrays identische Werte. Für alle Indizes, die in der Kopie gültig sind, jedoch nicht im Original, enthält die Kopie null. Solche Indizes existieren nur dann, wenn die angegebene Länge größer als die des ursprünglichen Arrays ist. Das resultierende Array gehört genau zur selben Klasse wie das ursprüngliche Array.
2770
2771 public static <T,U> T[] More ...copyOf(U[] original, int newLength, Class<? extends T[]> newType) {
2772 T[] copy = ((Object)newType == (Object)Object[].class)
2773 ? (T[]) new Object[newLength]
2774 : (T[]) Array.newInstance(newType.getComponentType(), newLength);
2775 System.arraycopy(original, 0, copy, 0,
2776 Math.min(original.length, newLength));
2777 return copy;
2778 }
oder Arrays.copyOfRange()
wird auch den Trick machen:
public static <T> T[] copyOfRange(T[] original, int from, int to)
Kopiert den angegebenen Bereich des angegebenen Arrays in ein neues Array. Der Anfangsindex des Bereichs (von) muss zwischen Null und Originallänge einschließlich liegen. Der Wert am Original [von] wird in das Anfangselement der Kopie eingefügt (außer von == original.length oder von == bis). Werte von nachfolgenden Elementen im ursprünglichen Array werden in nachfolgenden Elementen in der Kopie platziert. Der endgültige Index des Bereichs (bis), der größer oder gleich von sein muss, kann größer als original.length sein. In diesem Fall wird in allen Elementen der Kopie, deren Index größer oder gleich original ist, null gesetzt. Länge - von. Die Länge des zurückgegebenen Arrays beträgt to - from. Das resultierende Array gehört genau zur selben Klasse wie das ursprüngliche Array.
3035 public static <T,U> T[] More ...copyOfRange(U[] original, int from, int to, Class<? extends T[]> newType) {
3036 int newLength = to - from;
3037 if (newLength < 0)
3038 throw new IllegalArgumentException(from + " > " + to);
3039 T[] copy = ((Object)newType == (Object)Object[].class)
3040 ? (T[]) new Object[newLength]
3041 : (T[]) Array.newInstance(newType.getComponentType(), newLength);
3042 System.arraycopy(original, from, copy, 0,
3043 Math.min(original.length - from, newLength));
3044 return copy;
3045 }
Wie Sie sehen können, sind beide nur Wrapper-Funktionen System.arraycopy
mit defensiver Logik, dass das, was Sie versuchen, gültig ist.
System.arraycopy
ist der absolut schnellste Weg, um Arrays zu kopieren.