История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...
Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...
Топ:
Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов...
Техника безопасности при работе на пароконвектомате: К обслуживанию пароконвектомата допускаются лица, прошедшие технический минимум по эксплуатации оборудования...
Генеалогическое древо Султанов Османской империи: Османские правители, вначале, будучи еще бейлербеями Анатолии, женились на дочерях византийских императоров...
Интересное:
Как мы говорим и как мы слушаем: общение можно сравнить с огромным зонтиком, под которым скрыто все...
Отражение на счетах бухгалтерского учета процесса приобретения: Процесс заготовления представляет систему экономических событий, включающих приобретение организацией у поставщиков сырья...
Берегоукрепление оползневых склонов: На прибрежных склонах основной причиной развития оползневых процессов является подмыв водами рек естественных склонов...
Дисциплины:
2022-10-27 | 26 |
5.00
из
|
Заказать работу |
|
|
Метод arraycopy() - Копирование массива
Стандартная библиотека Java содержит статический метод System.arraycopy(), который копирует массивы значительнее быстрее, чем при ручном копировании в цикле for.
В аргументах arraycopy() передается исходный массив, начальная позиция копирования в исходном массиве, приёмный массив, начальная позиция копирования в приёмном массиве и количество копируемых элементов. Любое нарушение границ массива приведет к исключению.
Разработчик Avi Yehuda написал программу, которая вычисляет время на копирование с помощью цикла for и с помощью метода arraycopy() на примере с миллионом элементов. Ручное копирование у него заняло 182 мс, с помощью метода arraycopy() - 12 мс. Разница колоссальна.
public class ArrayCopyTestActivity extends Activity { private static final int SIZE_OF_ARRAY = 1000000; private long time; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Integer [] sourceArray = new Integer[SIZE_OF_ARRAY]; Integer [] dst = new Integer[SIZE_OF_ARRAY]; fillArray(sourceArray); startBenchmark(); naiveCopy(sourceArray,dst); stopBenchmark(); startBenchmark(); System.arraycopy(sourceArray, 0, dst, 0, sourceArray.length); stopBenchmark(); } private void naiveCopy(Integer [] src, Integer [] dst) { for (int i = 0; i < src.length; i++) { dst[i]=src[i]; } } private void fillArray(Integer [] src) { for (int i = 0; i < src.length; i++) { src[i]=i; } } private void startBenchmark() { time = System.currentTimeMillis(); } private void stopBenchmark() { time = System.currentTimeMillis() - time; Log.d("array copy test", "time="+time); }}Обзор был бы не полным без описания метода копирования массивов arraycopy(), который использует сама исполняющая система Java.
Метод находится в классе System в пакете java.lang и позволяет копировать массивы быстрее, чем это получается в случае поэлементного итеративного копирования. Метод перегружен для всех примитивных типов и типа Object.
|
Общая форма метода имеет вид:
static void arraycopy(type[] src, int src_ind, type[] dest, int dest_ind, int count)
Метод arraycopy(a, starta, r, startr, a.length); класса System копирует из массива a с позиции starta все a.length элементов, в массив r располагая их в массиве r начиная с позиции startr.
System.arraycopy(a, 0, r, 0, a.length);
System.arraycopy(b, 0, r, a.length, b.length); //реализация a+b
Класс Arrays и его методы
В пакете java.util находится класс Arrays, который содержит методы манипулирования содержимым массива, а именно для поиска, заполнения, сравнения, преобразования в коллекцию и прочие.
int binarySearch(параметры) | – перегруженный метод организации бинарного поиска значения в массивах примитивных и объектных типов. Возвращает позицию первого совпадения; |
void fill(параметры) | – перегруженный метод для заполнения массивов значениями различных типов и примитивами; |
void sort(параметры) | – перегруженный метод сортировки массива или его части с использованием интерфейса Comparator и без него; |
copyOf(оригинальный_массив,новая_длина) | – копирует заданную область массива в новый массив; int[] numbers = new int[] { 1, 2, 3, 5 }; int[] figures = Arrays.copyOf(numbers, numbers.length); |
toString(ссылка на массив) | -вывод одномерного массива в строковом виде // вывод массива объектов String String[] strArr = {"A", "C", "B", "Z", "E"}; Arrays.sort(strArr); System.out.println(Arrays.toString(strArr)); / вывод массива int'ов int[] intArr = {5,9,1,10}; Arrays.sort(intArr); System.out.println(Arrays.toString(intArr)); |
static <T> T[] copyOfRange(T[] original, int from, int to) | – копирует заданную область массива в новый массив; String[] massive1 = {"Татьяна", "Сергей", "Александр", "Павлик"}; // Копируем элементы массива в другой массив String[] massive2= Arrays.copyOf(massive1, 3); // Копируем нужные элементы в диапазоне String[] massive3= Arrays.copyOfRange(massive1, 1,massive1.length); |
deepToString(ссылка на двумерный массив) | - вывод двумерного массива System.out.println(Arrays.deepToString(ch)); где ch двумерный массив |
equals(ссылка на одномерный массив 1, ссылка на одномерный массив 2). | Сравнение на равенство одномерных массивов. Результат true, если их длины равны и они поэлементно равны. //Создаем два массива int[]a1=newint[10]; int[]a2=new int[10]; //заполняем их девятками Arrays.fill(a1,9); Arrays.fill(a2,9); System.out.println("Сравним:"+Arrays.equals(a1,a2)); |
/* Перебор элементов массива, не лучший способ,* Вообще, никогда не используйте.length внутри цикла,* т.к. тогда он будет на каждой итерации
|
вызывать метод подсчета длины. */
for(int i=0; i<massive1.length;i++){
out.printf("%s ", massive1[i]);
}
out.println();
// Правильный вывод элементов массива по быстродействию
for(String s: massive2){
out.printf("%s ", s);
}
out.println();
for(String s1: massive3){
out.printf("%s", s1);
}
}
}
В качестве простого примера применения указанных методов можно привести следующий код.
/* пример # 21: методы класса Arrays: ArraysEqualDemo.java */
package chapt10;
import java.util.*;
public class ArraysEqualDemo {
public static void main(String[] args) {
char m1[] = new char [3];
char m2[] = { ‘a’, ‘b’, ‘c’ }, i;
Arrays.fill(m1, ‘a’);
System.out.print("массив m1:");
for (i = 0; i < 3; i++)
System.out.print(" " + m1[i]);
m1[1] = ‘b’;
m1[2] = ‘c’;
//m1[2]=’x’; // приведет к другому результату
if (Arrays.equals(m1, m2))
System.out.print("\nm1 и m2 эквивалентны");
Else
System.out.print("\nm1 и m2 не эквивалентны");
m1[0] = ‘z’;
Arrays.sort(m1);
System.out.print("\nмассив m1:");
for (i = 0; i < 3; i++)
System.out.print(" " + m1[i]);
System.out.print("\n значение ‘c’ находится в позиции-" + Arrays.binarySearch(m1, ‘c’));
Integer arr[] = {35, 71, 92};
//вывод массива объектов в строку
System.out.println(Arrays.deepToString(arr));
//вычисление хэш-кода исходя и значений элементов
System.out.println(Arrays.deepHashCode(arr));
Integer arr2[] = {35, 71, 92};
//сравнение массивов по седержимому
System.out.println(Arrays.deepEquals(arr, arr2));
char m3[] = new char [5];
// копирование массива
m3 = Arrays. copyOf (m1, 5);
System. out. print("массив m3:");
for (i = 0; i < 5; i++)
System. out. print(" " + m3[i]);
}
}
В результате компиляции и запуска будет выведено:
Массив m1: a a a
M1 и m2 эквивалентны
Массив m1: b c z
значение ‘c’ находится в позиции 1
[35, 71, 92]
65719
True
массив m3: b c z □ □
|
|
Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...
Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьшения длины пробега и улучшения маневрирования ВС при...
Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...
Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!