Как скопировать массив в Java? Копирование массивов | OTUS

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

В статье поговорим о некоторых методах копирования массивов в Java. Этот язык программирования имеет встроенные методы, предназначенные для решения данных задач. С их помощью вы сможете сделать как полную копию массива, так и выполнить копирование некоторых элементов массива.

Методы для копирования массивов в Java

В Java существует довольно много специальных методов для копирования массивов:

1.В первую очередь, хотелось бы упомянуть Object.clone() — этот метод вы можете использовать для полного копирования массива. Соответственно, если вы хотите скопировать массив частично, этот способ вам не подойдёт.

2.Следующий на очереди — System.arraycopy() — по сути, это один из наилучших способов создать частичную копию массива в Java. В этом методе определены следующие параметры: — массив, элементы которого планируем копировать; — индекс элемента; — итоговый (результирующий) массив; — первый элемент итогового массива; — общее число элементов, предназначенных для копирования.

К примеру, написав System.arraycopy(источник, 2, назначения, 5, 7), вы скопируете семь элементов из массива-источника в итоговый массив, начиная со второго индекса источника в пятый индекс результирующего массива.

3.Arrays.copyOf() — подойдёт вам, если планируете выполнить копирование нескольких первых элементов массива либо сделать полную копию массива. Способ не так универсален, как System.arraycopy(), но так же прост в применении.

4.Arrays.copyOfRange() — полезный метод, обеспечивающий частичное копирование массива.

В принципе, для решения большинства задач по полному либо частичному копированию массивов в Java вышеперечисленных методов вам вполне хватит. Только учтите, что методы, встроенные в Java для копирования, годятся лишь для одномерных массивов.

Пришла пора посмотреть на них в действии.

import java.util.Arrays;

public class JavaArrayCopyExample {

    /**
     * В этом классе мы демонстрируем методы копирования массивов в java
     * @param args
     */
    public static void main(String[] args) {
        int[] source = {1,2,3,4,5,6,7,8,9};
        int[] source1 = {1,2,3};
        int[] destination=null;
        System.out.println("Массив-источник = " + Arrays.toString(source));

        destination = copyFirstFiveFieldsOfArrayUsingSystem(source);
        System.out.println("Копируем первые пять элементов массива, если они есть. Итоговый массив = " + Arrays.toString(destination));

        destination = copyFirstFiveFieldsOfArrayUsingSystem(source1);
        System.out.println("Копируем первые пять элементов массива, если они есть. Итоговый массив = " + Arrays.toString(destination));

        destination = copyFullArrayUsingSystem(source);
        System.out.println("Осуществляем полное копирование массива посредством System.copyarray(). Итоговый массив = " + Arrays.toString(destination));

        destination = copyFullArrayUsingClone(source);
        System.out.println("Осуществляем полное копирование массива посредством clone(). Итоговый массив = " + Arrays.toString(destination));

        destination = copyFullArrayUsingArrayCopyOf(source);
        System.out.println("Осуществляем полное копирование массива посредством Arrays.copyOf(). Итоговый массив = " + Arrays.toString(destination));

        destination = copyLastThreeUsingArrayCopyOfRange(source);
        System.out.println("Копируем последние три элемента массива посредством Arrays.copyOfRange(). Итоговый массив = " + Arrays.toString(destination));
    }

    /**
     * Данный метод выполняет полное копирование массива посредством Arrays.copyOf()
     * @param source
     * @return
     */
    private static int[] copyFullArrayUsingArrayCopyOf(int[] source) {
        return Arrays.copyOf(source, source.length);
    }

    /**
     * Данный метод копирует последние три элемента посредством
     * Arrays.copyOfRange() 
     * @param source
     * @return
     */
    private static int[] copyLastThreeUsingArrayCopyOfRange(int[] source) {
        // проверка длины для предотвращения java.lang.ArrayIndexOutOfBoundsException
        //но для простоты метода мы этого не делаем :)
        return Arrays.copyOfRange(source, source.length-3, source.length);
    }

    /**
     * Данный метод выполняет полное копирование массива посредством clone() 
     * @param source
     * @return
     */
    private static int[] copyFullArrayUsingClone(int[] source) {
        return source.clone();
    }

    /**
     * Данный метод выполняет полное копирование массива посредством System.arraycopy() 
     * @param source
     * @return
     */
    private static int[] copyFullArrayUsingSystem(int[] source) {
        int[] temp=new int1;
        System.arraycopy(source, 0, temp, 0, source.length);
        return temp;
    }

    /**
     * Метод копирует первые пять элементов 
     * посредством System.arraycopy()
     * @param source
     * @return
     */
    private static int[] copyFirstFiveFieldsOfArrayUsingSystem(int[] source) {
        if(source.length > 5){
            int[] temp=new int[5];
            System.arraycopy(source, 0, temp, 0, 5);
            return temp;
        }else{
            int[] temp=new int1;
            System.arraycopy(source, 0, temp, 0, source.length);
            return temp;
        }

    }

}

Теперь посмотрим на результат выполнения нашей программы:

Массив-источник = [1, 2, 3, 4, 5, 6, 7, 8, 9]
Копируем первые пять элементов массива, если они есть. Итоговый массив = [1, 2, 3, 4, 5]
Копируем первые пять элементов массива, если они есть. Итоговый массив = [1, 2, 3]
Осуществляем полное копирование массива посредством System.copyarray(). Итоговый массив = [1, 2, 3, 4, 5, 6, 7, 8, 9]
Осуществляем полное копирование массива посредством clone(). Итоговый массив = [1, 2, 3, 4, 5, 6, 7, 8, 9]
Осуществляем полное копирование массива посредством Arrays.copyOf(). Итоговый массив = [1, 2, 3, 4, 5, 6, 7, 8, 9]
Копируем последние три элемента массива посредством Arrays.copyOfRange(). Итоговый массив = [7, 8, 9]

Вот и всё. Если же вы хотите получить действительно продвинутые знания по Java, приходите на наш курс:

Источник

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
1 комментарий
Комментарий удален
Для комментирования необходимо авторизоваться
Популярное
Сегодня тут пусто
Запланируй обучение с выгодой!
Получи скидку 10% на все курсы ноября и декабря до 16.11 →