Общее·количество·просмотров·страницы

Java Dev Notes - разработка на Java (а также на JavaScript/Python/Flex и др), факты, события из АйТи

понедельник, 4 мая 2009 г.

Массивы в Java - Часть 2 - Копирование и клонирование

Существует несколько способов провести копирование массива:

  • используя метод System.arraycopy
  • используя метод clone
  • используя методы Arrays.copyOf или Arrays.copyOfRange
  • провести копирование вручную в цикле

Рассмотрим их по порядку.

КОПИРОВАНИЕ С ИСПОЛЬЗОВАНИЕМ System.arraycopy

Массивы копируются с помощью метода System.arraycopy().
Сигнатура метода следующая:

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

Данный метод, после всех проверок, копирует length элементов массива src, начиная с позиции srcPos, в массив dest, начиная с позиции destPos. Его удобно использовать, когда нужно скопировать лишь часть массива. Пример использования:

String[] a = {"abc", "def", "ghs"};
String[] b = new String[5];
System.arraycopy(a,0,b,0,a.length);
for (int i=0; i<b.length; i++)
System.out.println(b[i]);

На печать будет выведено следующее:
abc
def
ghs
null
null


КОПИРОВАНИЕ С ИСПОЛЬЗОВАНИЕМ МЕТОДА clone

По умолчанию, все массивы являются объектами, т.е. поддерживают методы класса java.lang.Object.
Массивы также наследуют интерфейсы java.lang.Cloneable, java.io.Serializable. Для массивов переопределен метод clone(), который проводит поэлементное копирование. Пример использования:

String[] a = {"abc", "def", "ghs"};
String[] b = (String[])a.clone();
a[0] = "changed";
for (int i=0; i<b.length; i++)
System.out.println(b[i]);

На печать будет выведено следующее:
abc
def
ghs


КОПИРОВАНИЕ С ИСПОЛЬЗОВАНИЕМ Arrays.copyOf

Сигнатура метода Arrays.copyOf для чисел типа int имеет следующий вид:

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

Производится копирование массива original, возвращается массив длиной newLength. Если original.length < newLength, то оставшаяся часть массива заполняется нулями. Пример использования:

int[] a = {1,2,3};
int[] b = Arrays.copyOf(a,5);
for (int i=0; i<b.length; i++)
System.out.println(b[i]);

На печать будет выведено следующее:
1
2
3
0
0


КОПИРОВАНИЕ ВРУЧНУЮ в ЦИКЛЕ

Простенький пример:

int[] a = {1,2,3};
int[] b = new int[a.length];
for (int i=0; i<a.length; i++)
b[i] = a[i];

3 комментария:

  1. Копирование в ручную не работает, проверьте

    ОтветитьУдалить
  2. Да ладно вам - нужно после for в фигурные скобки взять строчку. Ну и добавить вывод массива (такие мелочи можно и самостоятельно добавлять).
    package labs;
    public class asd {
    public static void main(String[] args) {
    int[] a = {1,2,3};
    int[] b = new int[a.length];
    for (int i=0; i<a.length; i++)
    {
    b[i] = a[i];
    System.out.println(b[i]);
    }
    }
    }

    ОтветитьУдалить

Постоянные читатели