Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...
Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...
Топ:
Основы обеспечения единства измерений: Обеспечение единства измерений - деятельность метрологических служб, направленная на достижение...
Установка замедленного коксования: Чем выше температура и ниже давление, тем место разрыва углеродной цепи всё больше смещается к её концу и значительно возрастает...
Генеалогическое древо Султанов Османской империи: Османские правители, вначале, будучи еще бейлербеями Анатолии, женились на дочерях византийских императоров...
Интересное:
Национальное богатство страны и его составляющие: для оценки элементов национального богатства используются...
Наиболее распространенные виды рака: Раковая опухоль — это самостоятельное новообразование, которое может возникнуть и от повышенного давления...
Лечение прогрессирующих форм рака: Одним из наиболее важных достижений экспериментальной химиотерапии опухолей, начатой в 60-х и реализованной в 70-х годах, является...
Дисциплины:
|
из
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 □ □
|
|
|
Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...
Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...
Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...
Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...
© cyberpediasu.com 2017-2026 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!