Стандартные средства Java для работы с массивами

В классе Arrays из пакета java.util собраны статические методы, которые позволяют программисту облегчить работу, связанную с обработкой массивов. В частности, класс содержит методы, которые выполняют сравнение, заполнение, бинарный поиск и быструю сортировку массивов. Рассмотрим обзорно отдельные методы класса Arrays.

Метод binarySearch() использует бинарный поиск для нахождения заданного значения, применяется только к отсортированным массивам. Общая форма метода имеет вид:

static int binarySearch(type[] arr, type element)

Здесь type[2] – любой примитивный тип или тип Object. Метод возвращает индекс найденного элемента массива arr[]. Если элемент element не найден, то возвращается отрицательное число, абсолютное значение которого равно индексу, с которым элемент был бы вставлен в массив в заданном порядке. Если в массиве есть несколько одинаковых элементов, нет гарантии правильного поиска. Используемый алгоритм не был разработан в расчете на повторяющие элементы, хотя их присутствие не запрещается.

Методы соруOf() и copyOfRange()возвращают копию массива и имеют следующие общие формы:

static type[] copyOf(type[] arr, int len)

static type[] copyOfRange(type[] arr, int from, int to)

Исходный массив задан параметром arr[]. В методе copyOf() в качестве параметра передается длина копии len. Если копия длиннее, чем источник, то для числовых массивов она дополняется нулями, для объектов – значениями null. Если копия короче, чем источник, она усекается. В методе copyOfRange()диапазон для копирования задается от индекса from включительно до индекса to исключительно.

Метод equals() сравнивает массивы и возвращает значение true, если два массива эквивалентны. В противном случае он возвращает значение false.

static boolean equals(type[] arr1, type[] arr2)

Здесь arr1 и arr2 – массивы, сравниваемые на эквивалентность. При сравнении массивов проверяются следующие условия: в массивах должно быть равное количество элементов и каждый элемент должен быть эквивалентен соответствующему элементу другого массива.

Метод fill() заполняет элементы массива заданным значением. Метод fill() имеет две версии: первая присваивает всем элементам массива arr[] значение value:

static void fill(type[] arr, type value)

Вторая версия метода fill() присваивает значение value подмножеству массива arr[] от индекса from включительно до индекса to исключительно.

static void fill(type[] arr, int from, int to, boolean value)

Метод sort() сортирует массив по возрастанию и имеет две версии. Первая версия сортирует весь массив. Общая форма имеет вид:

static void sort(type[] arr)

Здесь arr[]– это массив, подлежащий сортировке. Вторая версия метода sort() позволяет указать диапазон массива, который следует упорядочить:

static void sort(type[] arr, int from, int to)

Массив arr[] сортируется по возрастанию от индекса from включительно до to исключительно.

Обзор был бы не полным без описания метода копирования массивов arraycopy(), который использует сама исполняющая система Java. Метод находится в классе System в пакете java.lang и позволяет копировать массивы быстрее, чем это получается в случае поэлементного итеративного копирования. Метод перегружен для всех примитивных типов и типа Object. Общая форма метода имеет вид:

static void arraycopy(type[] src, int src_ind, type[] dest, int dest_ind, int count)

Из массива, на который указывает ссылка src, копируется count элементов, начиная с элемента с индексом src_ind, в массив, на который указывает ссылка dest, начиная с его элемента с индексом dest_ind. Все индексы должны быть заданы так, чтобы элементы лежали в массивах, типы массивов должны быть совместимы, а примитивные типы обязаны полностью совпадать. Ссылки на массивы не должны быть равны null.

Рассмотрим пример демонстрирующий применение некоторых из представленных выше методов.


Задача 6.8 Дан двумерный массив целых чисел, состоящий из nxm элементов. Все строки массива, которые упорядочены по возрастанию, заменить нулями.

import java.util.*;

class Ex_6_8{

//метод инициализации массива

static void fill(int [][] a){

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

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

if (i%3==0) a[i][j]=j;

else a[i][j]=(int)(Math.random()*10)-5;

}

//метод вывода массива на печать

static void print(int[][] a){

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

System.out.println(Arrays.toString(a[i]));

}

//логический метод определяет отсортирован ли массив

static boolean is_sort(int[] t){

int[] t1=new int[t.length];

System.arraycopy(t,0,t1,0,t.length);

Arrays.sort(t1);

return (Arrays.equals(t,t1));

}

public static void main(String[] args) {

int n=5, m=5;

int[][] arr=new int[n][m];

fill(arr);

System.out.println("Исходная матрица");

print(arr);

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

if (is_sort(arr[i])) Arrays.fill(arr[i],0);

}

System.out.println("Новая матрица");

print(arr); }}

Результат:

Исходная матрица

[0, 1, 2, 3, 4]

[-5, -1, -4, 0, 0]

[4, -1, -3, -5, 0]

[0, 1, 2, 3, 4]

[-3, -5, 4, 2, 3]

Новая матрица

[0, 0, 0, 0, 0]

[-5, -1, -4, 0, 0]

[4, -1, -3, -5, 0]

[0, 0, 0, 0, 0]

 
 

[-3, -5, 4, 2, 3]


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: