Как скопировать массив в Java?

ошибок разработчиков Java Программирование и разработка

Если один массив копируется в другой, результатом должно быть два независимых массива с двумя разными именами, но с одинаковыми соответствующими значениями. Изменение значения одного элемента массива не должно приводить к изменению соответствующего элемента другого массива.

Когда массив действительно копируется в другой, если длина нового массива короче длины исходного массива, то новый массив является копией, но усеченной до скопированной длины. Если новый массив длиннее, то лишние элементы ближе к его концу заполняются значениями типа данных по умолчанию. Чтобы один массив можно было скопировать в другой, оба массива должны быть одного типа или совместимых типов.

В Java есть метод копирования одного массива в другой. Это метод copyOf(), и он перегружен для разных типов данных. Это статический метод класса Array. «статический» означает, что массив не должен быть создан для использования метода. Он использует имя класса Array с первой буквой «А» в верхнем регистре. Метод возвращает скопированный массив. В этой статье объясняются различные перегруженные формы метода copyOf(). Он включает в себя, как копировать ссылочные типы. Как скопировать диапазон массива не упущено.

Копирование массива логических значений

Синтаксис:

static boolean[] copyOf(boolean[] original, int newLength)

original — это имя исходного массива. newLength — длина нового или скопированного массива. Если он короче, копия усекается до новой длины. Если он длиннее, значение false дополняется в качестве значений нового массива, чтобы иметь новую длину. Следующая программа иллюстрирует это:

    import java.util.Arrays;
public class TheClass {
public static void main(String[] args) {
boolean[] orig = {truetruetruetruetrue};
boolean[] cpy1 = Arrays.copyOf(orig, 3);
for (int i=0; i< cpy1.length; i++) {System.out.print(cpy1[i]); System.out.print(‘ ‘);} System.out.println();
boolean[] cpy2 = Arrays.copyOf(orig, 5);
for (int i=0; i< cpy2.length; i++) {System.out.print(cpy2[i]); System.out.print(‘ ‘);} System.out.println();
boolean[] cpy3 = Arrays.copyOf(orig, 7);
for (int i=0; i< cpy3.length; i++) {System.out.print(cpy3[i]); System.out.print(‘ ‘);} System.out.println();
}
}

Результат:

true true true

true true true true true

true true true true true false false

Для первой выходной строки есть усечение. Для второй выходной строки оба массива одинаковы. Новый массив длиннее исходного массива для третьей строки вывода.

Длина нового массива определяется параметром newLength синтаксиса метода copyOf().

Копирование массива байтовых значений

Синтаксис:

static byte[] copyOf(byte[] original, int newLength)

original — это имя исходного массива. newLength — длина нового или скопированного массива. Если он короче, копия усекается до новой длины. Если он длиннее, 0 дополняется значениями нового массива, чтобы иметь новую длину. Следующий код метода main() иллюстрирует это:

    static byte[] copyOf(byte[] original, int newLength)

original — это имя исходного массива. newLength — длина нового или скопированного массива. Если он короче, копия усекается до новой длины. Если он длиннее, 0 дополняется значениями нового массива, чтобы иметь новую длину. Следующий код метода main ( ) иллюстрирует это :

public static void main(String[] args) {
byte[] orig = {12345};
byte[] cpy1 = Arrays.copyOf(orig, 3);
for (int i=0; i< cpy1.length; i++) {System.out.print(cpy1[i]); System.out.print(‘ ‘);} System.out.println();
byte[] cpy2 = Arrays.copyOf(orig, 5);
for (int i=0; i< cpy2.length; i++) {System.out.print(cpy2[i]); System.out.print(‘ ‘);} System.out.println();
byte[] cpy3 = Arrays.copyOf(orig, 7);
for (int i=0; i< cpy3.length; i++) {System.out.print(cpy3[i]); System.out.print(‘ ‘);} System.out.println();
}

Результат:

1 2 3

1 2 3 4 5

1 2 3 4 5 0 0

Длина нового массива определяется параметром newLength синтаксиса метода copyOf().

Копирование массива значений char

Синтаксис:

static char[] copyOf(char[] original, int newLength)

original — это имя исходного массива. newLength — длина нового или скопированного массива. Если он короче, копия усекается до новой длины. Если он длиннее, ’ ’ дополняется значениями нового массива, чтобы иметь новую длину. Пример кода:

        public static void main(String[] args) {
char[] orig = {‘A’‘B’‘C’‘D’‘E’};
char[] cpy1 = Arrays.copyOf(orig, 3);
for (int i=0; i< cpy1.length; i++) {System.out.print(cpy1[i]); System.out.print(‘ ‘);} System.out.println();
char[] cpy2 = Arrays.copyOf(orig, 5);
for (int i=0; i< cpy2.length; i++) {System.out.print(cpy2[i]); System.out.print(‘ ‘);} System.out.println();
char[] cpy3 = Arrays.copyOf(orig, 7);
for (int i=0; i< cpy3.length; i++) {System.out.print(cpy3[i]); System.out.print(‘ ‘);} System.out.println();
}

Результат:

A B C

A B C D E

A B C D E ‘ ’ ‘ ’

Длина нового массива определяется параметром newLength синтаксиса метода copyOf().

Копирование массива двойных значений

Синтаксис:

static double[] copyOf(double[] original, int newLength)

original — это имя исходного массива. newLength — длина нового или скопированного массива. Если он короче, копия усекается до новой длины. Если он длиннее, 0.0 дополняется в качестве значений нового массива, чтобы иметь новую длину. Пример кода:

        public static void main(String[] args) {
double[] orig = {1.52.53.54.55.5};
double[] cpy1 = Arrays.copyOf(orig, 3);
for (int i=0; i< cpy1.length; i++) {System.out.print(cpy1[i]); System.out.print(‘ ‘);} System.out.println();
double[] cpy2 = Arrays.copyOf(orig, 5);
for (int i=0; i< cpy2.length; i++) {System.out.print(cpy2[i]); System.out.print(‘ ‘);} System.out.println();
double[] cpy3 = Arrays.copyOf(orig, 7);
for (int i=0; i< cpy3.length; i++) {System.out.print(cpy3[i]); System.out.print(‘ ‘);} System.out.println();
}

Результат:

1.5 2.5 3.5

1.5 2.5 3.5 4.5 5.5

1.5 2.5 3.5 4.5 5.5 0.0 0.0

Длина нового массива определяется параметром newLength синтаксиса метода copyOf().

Копирование массива значений с плавающей запятой

Синтаксис:

static float[] copyOf(float[] original, int newLength)

original — это имя исходного массива. newLength — длина нового или скопированного массива. Если он короче, копия усекается до новой длины. Если он длиннее, 0.0 дополняется в качестве значений нового массива, чтобы иметь новую длину. Пример кода:

        public static void main(String[] args) {
float[] orig = {1.5f, 2.5f, 3.5f, 4.5f, 5.5f};
float[] cpy1 = Arrays.copyOf(orig, 3);
for (int i=0; i< cpy1.length; i++) {System.out.print(cpy1[i]); System.out.print(‘ ‘);} System.out.println();
float[] cpy2 = Arrays.copyOf(orig, 5);
for (int i=0; i< cpy2.length; i++) {System.out.print(cpy2[i]); System.out.print(‘ ‘);} System.out.println();
float[] cpy3 = Arrays.copyOf(orig, 7);
for (int i=0; i< cpy3.length; i++) {System.out.print(cpy3[i]); System.out.print(‘ ‘);} System.out.println();
}

Результат:

1.5 2.5 3.5

1.5 2.5 3.5 4.5 5.5

1.5 2.5 3.5 4.5 5.5 0.0 0.0

Длина нового массива определяется параметром newLength синтаксиса метода copyOf().

Копирование массива значений int

Синтаксис:

static int[] copyOf(int[] original, int newLength)

original — это имя исходного массива. newLength — длина нового или скопированного массива. Если он короче, копия усекается до новой длины. Если он длиннее, 0 дополняется значениями нового массива, чтобы иметь новую длину. Пример кода:

        public static void main(String[] args) {
int[] orig = {12345};
int[] cpy1 = Arrays.copyOf(orig, 3);
for (int i=0; i< cpy1.length; i++) {System.out.print(cpy1[i]); System.out.print(‘ ‘);} System.out.println();
int[] cpy2 = Arrays.copyOf(orig, 5);
for (int i=0; i< cpy2.length; i++) {System.out.print(cpy2[i]); System.out.print(‘ ‘);} System.out.println();
int[] cpy3 = Arrays.copyOf(orig, 7);
for (int i=0; i< cpy3.length; i++) {System.out.print(cpy3[i]); System.out.print(‘ ‘);} System.out.println();
}

Результат:

1 2 3

1 2 3 4 5

1 2 3 4 5 0 0

Длина нового массива определяется параметром newLength синтаксиса метода copyOf().

Копирование массива длинных значений

Синтаксис:

static long[] copyOf(long[] original, int newLength)

original — это имя исходного массива. newLength — длина нового или скопированного массива. Если он короче, копия усекается до новой длины. Если он длиннее, 0 дополняется значениями нового массива, чтобы иметь новую длину. Пример кода:

        public static void main(String[] args) {
long[] orig = {12345};
long[] cpy1 = Arrays.copyOf(orig, 3);
for (int i=0; i< cpy1.length; i++) {System.out.print(cpy1[i]); System.out.print(‘ ‘);} System.out.println();
long[] cpy2 = Arrays.copyOf(orig, 5);
for (int i=0; i< cpy2.length; i++) {System.out.print(cpy2[i]); System.out.print(‘ ‘);} System.out.println();
long[] cpy3 = Arrays.copyOf(orig, 7);
for (int i=0; i< cpy3.length; i++) {System.out.print(cpy3[i]); System.out.print(‘ ‘);} System.out.println();
}

Результат:

1 2 3

1 2 3 4 5

1 2 3 4 5 0 0

Длина нового массива определяется параметром newLength синтаксиса метода copyOf().

Копирование массива коротких значений

Синтаксис:

static short[] copyOf(short[] original, int newLength)

original — это имя исходного массива. newLength — длина нового или скопированного массива. Если он короче, копия усекается до новой длины. Если он длиннее, 0 дополняется значениями нового массива, чтобы иметь новую длину. Пример кода:

        public static void main(String[] args) {
short[] orig = {12345};
short[] cpy1 = Arrays.copyOf(orig, 3);
for (int i=0; i< cpy1.length; i++) {System.out.print(cpy1[i]); System.out.print(‘ ‘);} System.out.println();
short[] cpy2 = Arrays.copyOf(orig, 5);
for (int i=0; i< cpy2.length; i++) {System.out.print(cpy2[i]); System.out.print(‘ ‘);} System.out.println();
short[] cpy3 = Arrays.copyOf(orig, 7);
for (int i=0; i< cpy3.length; i++) {System.out.print(cpy3[i]); System.out.print(‘ ‘);} System.out.println();
}

Результат:

1 2 3

1 2 3 4 5

1 2 3 4 5 0 0

Копирование массива ссылочных типов данных

Хорошим примером ссылочного типа данных является строковый объект, созданный из класса строк. Его синтаксис copyOf() такой же, как и у приведенных выше синтаксисов. Следующий код иллюстрирует это:

    import java.util.Arrays;
public class TheClass {

public static void main(String[] args) {
String[] orig = {«one»«two»«three»«four»«five»};
String[] cpy1 = Arrays.copyOf(orig, 3);
for (int i=0; i< cpy1.length; i++) {System.out.print(cpy1[i]); System.out.print(‘ ‘);} System.out.println();
String[] cpy2 = Arrays.copyOf(orig, 5);
for (int i=0; i< cpy2.length; i++) {System.out.print(cpy2[i]); System.out.print(‘ ‘);} System.out.println();
String[] cpy3 = Arrays.copyOf(orig, 7);
for (int i=0; i< cpy3.length; i++) {System.out.print(cpy3[i]); System.out.print(‘ ‘);} System.out.println();
}
}

Результат:

one two three

one two three four five

one two three four five null null

Значение по умолчанию для ссылочного типа данных равно null.

Копирование диапазона

Диапазон массива можно скопировать. Синтаксис для копирования диапазона массива символов:

static char[] copyOfRange(char[] original, int from, int to)

«от» — это первый индекс, а «до» — это последний индекс, значение диапазона которого просто не включено в копию. Пример кода:

        public static void main(String[] args) {
char[] orig = {‘A’‘B’‘C’‘D’‘E’};
char[] cpy = Arrays.copyOfRange(orig, 13);
for (int i=0; i<cpy.length; i++) {System.out.print(cpy[i]); System.out.print(‘ ‘);} System.out.println();
}

Результат:

B C

Копирование диапазонов примитивных и эталонных типов данных аналогично этому коду.

Вывод

Класс Array имеет статический перегруженный метод для копирования массивов. Используется для копирования всего массива. Если копируемый массив короткий, копирование будет производиться до указанной усеченной длины. Если скопированный массив длиннее исходного массива, значение по умолчанию будет дополнено дополнительными добавленными элементами. Статический метод copyOfRange() можно использовать для копирования диапазона. Следующее, что читатель должен изучить, это как копировать массив универсальных типов.

Читайте также:  Лучшие языки программирования для Apache Spark
Оцените статью
bestprogrammer.ru
Добавить комментарий