Рубрики

Копирование массива в Java

Для данного массива нам нужно скопировать его элементы в другой массив.

Метод 1 (простой, но неправильный)

У нас может возникнуть соблазн поступить так:

int a[] = {1, 8, 3};

 
// Создать массив b [] того же размера, что и []

int b[] = new int[a.length];

 
// Не копирует элементы a [] в b [], только делает
// б ссылаются на то же место
b = a;    

Однако это неверно!
Когда мы делаем «b = a», мы фактически присваиваем ссылку на массив. Следовательно, если мы внесем какое-либо изменение в один массив, оно будет отражено и в другом массиве, потому что и a, и b ссылаются на одно и то же местоположение.

// Java-программа, демонстрирующая простое назначение одного массива
// ссылка неверна.

public class Test

{

    public static void main(String[] args)

    {

        int a[] = {1, 8, 3};

  

        // Создать массив b [] того же размера, что и []

        int b[] = new int[a.length];

  

        // Не копирует элементы a [] в b [], только делает

        // б ссылаются на то же место

        b = a;    

  

        // Изменение на b [] также отразится в a [] как 'a' и

        // 'b' ссылаются на то же место.

        b[0]++;

  

        System.out.println("Contents of a[] ");

        for (int i=0; i<a.length; i++)

            System.out.print(a[i] + " ");

  

        System.out.println("\n\nContents of b[] ");

        for (int i=0; i<b.length; i++)

            System.out.print(b[i] + " ");

    }

}

Выход:

Contents of a[] 
2 8 3 

Contents of b[] 
2 8 3 

Способ 2: (легко и правильно)

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

// Java-программа для демонстрации копирования по одному
// присваиваем элементы a [] b [].

public class Test

{

    public static void main(String[] args)

    {

        int a[] = {1, 8, 3};

  

        // Создать массив b [] того же размера, что и []

        int b[] = new int[a.length];

  

        // Копировать элементы из a [] в b []

        for (int i=0; i<a.length; i++)

            b[i] = a[i];

  

        // Изменить b [], чтобы убедиться, что b [] отличается

        // из[]

        b[0]++;

  

        System.out.println("Contents of a[] ");

        for (int i=0; i<a.length; i++)

            System.out.print(a[i] + " ");

  

        System.out.println("\n\nContents of b[] ");

        for (int i=0; i<b.length; i++)

            System.out.print(b[i] + " ");

    }

}

Выход:

Contents of a[] 
1 8 3 

Contents of b[] 
2 8 3 

Способ 3: (с использованием Clone ())

В предыдущем методе нам пришлось перебирать весь массив, чтобы сделать копию, можем ли мы сделать лучше? Ответ ДА!

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

// Java-программа для демонстрации копирования массива с использованием clone ()

public class Test

{

    public static void main(String[] args)

    {

        int a[] = {1, 8, 3};

  

        // Копировать элементы из a [] в b []

        int b[] = a.clone();

  

        // Изменить b [], чтобы убедиться, что b [] отличается

        // из[]

        b[0]++;

  

        System.out.println("Contents of a[] ");

        for (int i=0; i<a.length; i++)

            System.out.print(a[i] + " ");

  

        System.out.println("\n\nContents of b[] ");

        for (int i=0; i<b.length; i++)

            System.out.print(b[i] + " ");

    }

}

Выход:

Contents of a[] 
1 8 3 

Contents of b[] 
2 8 3 

Метод 4: (Использование System.arraycopy ())

Мы также можем использовать метод System.arraycopy () . Система присутствует в пакете java.lang. Его подпись такова:

public static void arraycopy(Object src, int srcPos, Object dest, 
                             int destPos, int length)

Где src обозначает исходный массив, srcPos — это индекс, с которого начинается копирование. Аналогично, dest обозначает массив назначения, destPos — это индекс, из которого скопированные элементы помещаются в массив назначения. длина — длина копируемого массива. Программа ниже иллюстрирует то же самое:

// Java-программа для демонстрации копирования массива с использованием
// System.arraycopy ()

public class Test

{

    public static void main(String[] args)

    {

        int a[] = {1, 8, 3};

  

        // Создать массив b [] того же размера, что и []

        int b[] = new int[a.length];

  

        // Копировать элементы из a [] в b []

        System.arraycopy(a, 0, b, 0, 3);

  

        // Изменить b [], чтобы убедиться, что b [] отличается

        // из[]

        b[0]++;

  

        System.out.println("Contents of a[] ");

        for (int i=0; i<a.length; i++)

            System.out.print(a[i] + " ");

  

        System.out.println("\n\nContents of b[] ");

        for (int i=0; i<b.length; i++)

            System.out.print(b[i] + " ");

    }

}

Выход:

Contents of a[] 
1 8 3 

Contents of b[] 
2 8 3 

Обзор вышеуказанных методов:

  • Просто присвоить ссылку неправильно
  • Массив можно копировать, перебирая массив, и один за другим присваивая элементы.
  • Мы можем избежать итерации по элементам, используя clone () или System.arraycopy ()
  • clone () создает новый массив того же размера, но System.arraycopy () может использоваться для копирования из исходного диапазона в целевой диапазон.
  • System.arraycopy () работает быстрее, чем clone (), поскольку использует собственный интерфейс Java (источник: StackOverflow )

Эта статья предоставлена Ашутошем Кумаром . Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Копирование массива в Java

0.00 (0%) 0 votes