русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Основные понятия службы каталогов


Дата добавления: 2013-12-23; просмотров: 591; Нарушение авторских прав


Класс java.util.Arrays

Литература

Контрольные вопросы

1. http://kostin.ws/java/

2.

 


 

Массивы в языке Java, класс Arrays

Массивы являются элементом практически любой программы. Поэтому разработчики языка Java уделили этому вопросу достаточно много времени и проделали большую работу, что бы ими было пользоваться как можно удобней. В этой статье я рассмотрю, как самые известные способы работы, так и то, о чём часто даже не догадываются начинающие программисты, но что значительно упрощает программирование.

 

Для того чтобы начать работать с массивом какого либо типа нужно объявить переменную типа массив например для типа int это будет выглядеть так:

view plainprint?

1. int[] numbers;

Или так:

view plainprint?

1. int numbers[];

В особых случая можно даже так:

view plainprint?

1. public static void main(String... args){

2. }

Но первый вариант более предпочтителен, так как в нём явно отделяются тип переменной от её имени и его можно использовать в любом месте кода, где можно объявить переменную. Именно этим вариантом я и буду пользоваться в дальнейшем.

После этого необходимо выделить память под этот массив. Обычно это происходит вот так:

view plainprint?

1. int[] numbers;

2. numbers = new int[10];

Можно объявлять переменную и инициализировать её в одной строке:

view plainprint?

1. int[] numbers = new int[10];

Если же элементы будущего массива известны заранее, то можно использовать такой синтаксис:

view plainprint?

1. int[] numbers = {23,43,22,34,14,56,86,77,810,9};

Что бы теперь обратиться к элементам этого массива, мы можем использовать индекс элемента от 0 до 9 (в Java элементы массива нумеруются от 0, поэтому верхняя граница на 1 меньше, чем при инициализации):



view plainprint?

1. int[] numbers = new int[10];

2. int first = numbers[0];

3. number[4] = 76;

4. int last = numbers[9];

5. for(int i = 0; i < 10; i++){

6. System.out.println(number[i]);

7. }

 
Рис 1. Ссылка на массив

 

При этом следует помнить, что в переменной хранится не весь массив, а только ссылка на этот массив. Это можно увидеть наглядо на рисунке 1. Казалось бы, как нам разница, хранится весь массив или только ссылка на него? В реальности же оказывается если не учитывать этого момента, то можно попасть в достаточно неприятную ситуацию. Рассмотрим простой пример:

view plainprint?

1. int[] numbers = {1,23, 13};

2. int[] numbersCopy = numbers;

3. numbersCopy[1] = 43;

4.

5. for(int i = 0; i < 3; i++){

6. System.out.print(numbers[i]);

7. }

8. System.out.println();

9.

10. for(int i = 0; i < 3; i++){

11. System.out.print(numbersCopy[i]);

12. }

 
Рис 2. Копирование ссылки

 

Если считать, что в переменных хранятся не ссылки а массивы целиком, то результат должен был бы быть вывод двух строк: "12313" и "14313", но в реальности мы получим две одинаковые строки: "14313". Это происходит из-за того, что мы переменной nubmersCopy присваеваем не копию массива, а копию ссылки. И у нас получаются две переменные с одинаковыми значениями, но значения эти не массивы, как мы хотели, а ссылки на массив. Графически это можно изобразить так, как на рисунке 2. Самый простой способ избежать этого, это использовать метод clone у любого объекта типа массив. Так же объект класса массив имеет константу, в которой хранится количество элементов массива —length. Таким образом код можно переписать следующим образом:

view plainprint?

1. int[] numbers = {1,23, 13};

2. int[] numbersCopy = numbers.clone();

3. numbersCopy[1] = 43;

4.

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

6. System.out.print(numbers[i]);

7. }

8. System.out.println();

9.

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

11. System.out.print(numbersCopy[i]);

12. }

 
Рис 3. Массив массивов

В языке Java не существует многомерных массивов, но тем не менее у нас есть возможность в элементе массива хранить другой массив, что позволяет имитировать многомерные массивы. Благодаря этому мы можем создавать многомерные массивы с произвольной длинной элементов. Это проиллюстрированно на рисунке 3. В коде это выглядит следующим образом:

view plainprint?

1. /*Простой двумерный массив*/

2. int[][] twoDimensionsArray = new int[3][5];

3. /*Массив с разными размерностями, как на рис. 3*/

4. int[][] twoDimenstionsArray2 = {

5. {2,4,223},

6. {54,215},

7. {25,64,26,67}

8. };

9. /*Массив с разными размерностями, как на рис. 3*/

10. int[][] twoDimenstionsArray3 = new int[3][];

11. differentDimensions[0] = new int[3];

12. differentDimensions[1] = new int[2];

13. differentDimensions[2] = new int[4];

При работе с такими массивами полезно знать один трюк: всегда старайтесь располагать массивы с наименьшем числом элементов ближе к правой стороне, например:

view plainprint?

1. int[][] twoDimensionsArray = new int[3][500][2000][10000];

Дело в том, что для хранения каждого массива JVM хранит дополнительную информацию, и расположив массивы подобным образом вы уменьшите количество необходимой дополнительной информации до минимума.

Класс Arrays предназначен для работы с массивами. Он содержит методы для работы с целыми массивами, например:

· copyOf — предназначен для копирования массива;

· copyOfRange — копирует часть массива;

· toString — позволяет получить все элементы в виде одной строки;

· sort — сортирует массив методом quick sort;

· binarySearch — ищет элемент методом бинарного поиска;

· fill — заполняет массив переданным значением (удобно использовать, если нам необходимо значение по умалчанию для массива);

· equals — проверяет на идентичность массивы;

· deepEquals — проверяет на идентичность массивы массивов;

· asList — возвращает массив как коллекцию (коллекции будут рассмотрены в следующий раз).

Пример использования класса Arrays:

view plainprint?

1. int[] first = {31,25,3,324,22,33,643,12};

2. int[] second;

3.

4. second = Arrays.copyOf(first, first.length);

5. System.out.println(Arrays.equals(first, second));

6.

7. Arrays.sort(first);

8. System.out.println(Arrays.equals(first, second));

9. System.out.println(Arrays.toString(first));

10. System.out.println(Arrays.toString(second));

11.

12. Arrays.fill(second, 100);

13. System.out.println(Arrays.toString(second));

Если мы запустим этот код, то получим такой вывод:
true
false
[3, 12, 22, 25, 31, 33, 324, 643]
[31, 25, 3, 324, 22, 33, 643, 12]
[100, 100, 100, 100, 100, 100, 100, 100]

 

Прежде чем перейти к обзору процесса проектирования, включающего сбор и анализ данных о существующей структуре предприятия и подготавливающего реализацию Active Directory, необходимо ввести и определить ряд терминов, используемых в контексте службы каталогов Active Directory. Данная терминология приведена в соответствии с информационными материалами [1], [2], [3], [4].



<== предыдущая лекция | следующая лекция ==>
Задачи для самостоятельной проработки материала | Доверительные отношения


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Полезен материал? Поделись:

Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.004 сек.