Wenn Sie mit rohen Arrays arbeiten müssen und nicht ArrayList
puis Arrays
hat, 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, weil die System.arraycopy()
Methode löst viele ungeprüfte Ausnahmen aus, wenn Sie ihr unlogische Parameter übergeben.
Sie können entweder Arrays.copyOf()
die von der ersten nach der zweiten Seite kopiert wird. Nth
Element in das neue kürzere Array.
public static <T> T[] copyOf(T[] original, int newLength)
Kopiert das angegebene Array, wobei es abgeschnitten oder aufgefüllt wird damit die Kopie die angegebene Länge hat. [ ] sowohl im ursprünglichen Array als auch in der Kopie gültig sind, werden die beiden Arrays identische Werte enthalten. Für alle Indizes, die in der Kopie gültig sind gültig sind, aber nicht im Original, enthält die Kopie Null. Solche Indizes werden existieren nur, wenn die angegebene Länge größer ist als die des Original-Array ist. Das resultierende Array hat genau dieselbe 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 }
o Arrays.copyOfRange()
ist ebenfalls geeignet:
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 (from) muss zwischen null und original.length, einschließlich. Der Wert an original[from] wird in das das erste Element der Kopie (es sei denn from == original.length oder von == bis). Die Werte der nachfolgenden Elemente des ursprünglichen Arrays werden in die nachfolgenden Elemente der Kopie eingefügt. Der letzte Index des Bereichs (to), der größer als oder gleich from sein muss, kann größer als original.length sein, in diesem Fall wird Null in alle Elemente der Kopie, deren Index größer oder gleich ist original.length - from. Die Länge des zurückgegebenen Arrays ist to - von. Das resultierende Array hat genau die gleiche 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 diese beiden Funktionen nur Wrapper-Funktionen über System.arraycopy
mit defensiver Logik, dass das, was Sie zu tun versuchen, gültig ist.
System.arraycopy
ist der absolut schnellste Weg, Arrays zu kopieren.