Java — arrays

Перейдём к практике

Приступим к созданию массива объектов. Представьте, что у нас есть класс ObjMass и всё, что в нём есть, — это массив объектов Dog из трёх элементов:

    public class ObjMass {
    Dog[] name = new Dog 3];
}

Прекрасно. Но так как класс Dog мы раньше не описывали (интерпретатор Java знать не знает, что такое Dog и откуда его взять), то название объекта выделится красным. Исправим это, создав параллельно класс Dog:

    class ObjMass {
    Dog[] abc = new Dog 3];
}

class Dog{

}

Так, хорошо. Но зачем нам массив, состоящий из пустых объектов? Пусть у собак будут хотя бы клички:

    class ObjMass {
    Dog[] abc = new Dog 3];
}

class Dog{
   String name;

    public Dog (String name){
        this.name = name;
    }
}

Вот, теперь Dog имеет содержание.

Давайте сейчас обратимся к объектам, которые ещё не созданы, как говорится, расширим пример

Обратите ваше внимание, что у нас перед массивом объектов Dog находится модификатор static. Также добавим метод main:

    class ObjMass {
    static Dog[] abc = new Dog 3];

    public static void main (String[] args){
        }
    }
}

class Dog{
   String name;

    public Dog (String name){
        this.name = name;
    }
}

Для вывода массива на экран создаём цикл. И выводим не имена собак (abc.name), а объекты — abc:

    class ObjMass {
   static Dog[] abc = new Dog 3];

    public static void main (String[] args){
        for (int i = ; i<3; i++){
            System.out.println(abci]);
        }
    }
}
class Dog{
   String name;

    public Dog (String name){
        this.name = name;
    }
}

И увидим следующий результат:

null
null
null

Это и есть значения по умолчанию, при ссылке на которые возникнет ошибка NullPointerException. Она появляется, когда мы ссылаемся на свойство null-ного объекта. К примеру, давайте попробуем вывести на экран имена собак (abc.name):

    class ObjMass {
   static Dog[] abc = new Dog 3];

    public static void main (String[] args){
        for (int i = ; i<3; i++){
            System.out.println(abciname);
        }
    }
}

class Dog{
   String name;

    public Dog (String name){
        this.name = name;
    }
}

Результатом станет тот самый NullPointerException. Чтобы этого не допустить, массив объектов надо заполнить:

    class ObjMass {
   static Dog[] abc = new Dog 3];

    public static void main (String[] args){
        abc = new Dog("Billy");
        abc1 = new Dog("Tom");
        abc2 = new Dog("Jonny");

        for (int i = ; i<3; i++){
            System.out.println(abciname);
        }
    }
}

class Dog{
   String name;

    public Dog (String name){
        this.name = name;
    }
}

Результат выполнения кода:

Billy 
Tom 
Jonny 

Вот и всё, теперь вы знакомы с особенностями применения массива объектов в Java и знаете, как добавить объект в массив. В прочих аспектах всё функционирует практически так же, как и в массивах примитивных типов.

Using Java Arrays

We have an array, now what? You will probably want to know how to have all these variables stored in just this one array variable. See, an array is just a bunch of storage spaces. Each of these spaces is given a number, starting with the number 0. Here’s a diagram to help illustrate what I mean.

To access one of these storage squares, you simply give the number of the space you want after the variable name. Let’s look at our previous example and access the first element (the storage space marked as a 0).

That stores the number 5 in our integer array called numbers, and it stores it in space 0 which is the first spot in the array.

Ok so now we can do this:

Notice how I stopped at 4 and not 5. What would happen if I did this:

I would get an ArrayOutOfBoundsException. Basically, Java will telling me that I have gone too far, and that there is no space 5. Remember we had said that this array only has 5 spots, and those 5 spots are 0, 1, 2, 3, and 4. There is no 5, and Java will complain and your program will not work correctly. You won’t actually get an error, this will happen once your program has already started, so you have to be extra careful!

But wait a minute. What if you need 200 variable spots? This will still take a really long time to code!

If the data you’re storing is totally random, this might be true, but if you want to store say, the numbers 1 through 200, there’s an easy way to do this. Remember for loops?

First thing you’ll notice is that I did numbers.length. This is built into Java to give me the size of the array. Since I declared the numbers array to have 5 storage spots, numbers.length in this case is the same as writing in 5. So, my for loop will loop 5 times.

The next thing I did is put the variable x inside the square brackets. Remember x is just whatever number the loop is on, so it will continue to go to the next storage space every time it loops. Oh, I’m also making the variable store x, so it will also store whatever x is during that loop.

Basically, I’m storing the number 0 in storage space 0, the number 1 in storage space 1, all the way up to storage space 4 (there is no 5 remember).

Поиск с помощью Arrays.binarySearch()

Класс Arrays содержит набор методов с именем binarySearch(). Этот метод поможет вам выполнить бинарный поиск в массиве. Сначала массив должен быть отсортирован. Вы можете сделать это самостоятельно или с помощью метода Arrays.sort(), описанного ранее в этом тексте. Вот пример:

int[] ints = {0,2,4,6,8,10};

int index = Arrays.binarySearch(ints, 6);

System.out.println(index);

Вторая строка этого примера ищет в массиве значение 6. Метод binarySearch() возвращает индекс в массиве, в котором был найден элемент. В приведенном выше примере метод binarySearch() вернет 3.

Если в массиве существует более одного элемента с искомым значением, нет гарантии, какой элемент будет найден.

Если элемент с данным значением не найден, будет возвращено отрицательное число. Отрицательным числом будет индекс, по которому будет вставлен искомый элемент, а затем минус один. Посмотрите на этот пример:

int[] ints = {0,2,4,6,8,10};

int index = Arrays.binarySearch(ints, 7);

System.out.println(index);

Число 7 не найдено в массиве. Номер 7 должен был быть вставлен в массив по индексу 4, если 7 должен был быть вставлен в массив (и порядок сортировки сохранен). Следовательно, binarySearch() возвращает -4 — 1 = -5.

Если все элементы в массиве меньше искомого значения, то двоичная Search() вернет — длина массива — 1. Посмотрите на этот пример:

int[] ints = {0,2,4,6,8,10};

int index = Arrays.binarySearch(ints, 12);

System.out.println(index);

В этом примере мы ищем 12 в массиве, но все элементы в массиве меньше 12. Поэтому binarySearch() вернет -length(-6) — 1 = -6 -1 = -7.

Метод Arrays.binarySearch() для поиска части массива. Вот как это выглядит:

int[] ints = {0,2,4,6,8,10};

int index = Arrays.binarySearch(ints, 0, 4, 2);

System.out.println(index);

В этом примере выполняется поиск в массиве значения 2, но только между индексами 0 и 4 (без 4).

Эта версия binarySearch() работает так же, как и другая версия, за исключением случаев:

  • Если не найдено ни одного элемента, совпадающего в пределах интервала индекса, то все равно вернется индекс того места, где должно было быть вставлено значение.
  • Если все значения в интервале меньше искомого значения, вернется -toIndex -1, а не -array length — 1.

Таким образом, этот пример:

int[] ints = {0,2,4,6,8,10};

int index = Arrays.binarySearch(ints, 0, 4, 12);

вернет -5, а не -7, как в двоичном поиске (целых, 12).

Массив #

Массив — это совокупность однотипных переменных, для обращения к которым используется общее имя. Java допускает создание массивов любого типа, которые могут иметь одно или несколько измерений.

многомерный массив на примере февраля

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

Можно создать трёхмерный и четырёхмерный массив. Если будете играться, то имейте в виду, что с увеличением многомерности вы увеличивайте потребляемые мощности. Для ознакомления с основами программирования достаточно двухмерного массива(уверенного использования) и понятия, что массив может состоять из массивов. И массивы могут быть разными, как и длина строчек и столбцов. По этому есть такое понятие как длина массива и длина измерения массива.

Сортировка объектов

Показанный ранее пример Arrays.sort() работает только для массивов примитивных типов данных, которые имеют порядок:

  • естественный;
  • числовой;
  • символьный в таблице ASCII (двоичное число, представляющее символ).

У объектов может не быть естественного порядка сортировки, поэтому вам нужно предоставить другой объект, который может определять порядок ваших объектов. Такой объект называется компаратором — это интерфейс.

Вот первый класс для объектов, которые мы хотим отсортировать:

private static class Employee{
    public String name;
    public int    employeeId;

    public Employee(String name, int employeeId){
        this.name       = name;
        this.employeeId = employeeId;
    }
}

Класс Employee — это простая модель сотрудника, у которого есть имя и идентификатор. Вы можете отсортировать массив объектов Employee по имени или по идентификатору сотрудника.

Вот первый пример сортировки массива объектов Employee по их имени с помощью метода Arrays.sort():

Employee[] employeeArray = new Employee;

employeeArray = new Employee("Xander", 1);
employeeArray = new Employee("John"  , 3);
employeeArray = new Employee("Anna"  , 2);

java.util.Arrays.sort(employeeArray, new Comparator() {
    @Override
    public int compare(Employee e1, Employee e2) {
        return e1.name.compareTo(e2.name);
    }
});


for(int i=0; i < employeeArray.length; i++) {
    System.out.println(employeeArray.name);
}
  1. Сначала объявляется массив.
  2. Три объекта Employee создаются и вставляются в массив.
  3. Метод Arrays.sort() вызывается для сортировки массива. В качестве параметра передаем массив employee и реализацию Comparator, которая может определять порядок объектов Employee. Это создает анонимную реализацию интерфейса Comparator.

В примере важно уловить реализацию метода compare() анонимной внутренней реализации интерфейса Comparator. Этот метод возвращает:

  • положительное число, если первый объект «больше»(позже в порядке сортировки), чем второй объект;
  • 0 — они «равны»(в порядке сортировки);
  • отрицательное число, если первый объект «меньше» (ранее в порядке сортировки), чем второй объект.

В приведенном выше примере мы просто вызываем метод String.compare(), который выполняет для нас сравнение (сравнивает имена сотрудников).

После сортировки массива мы перебираем его и выводим имена сотрудников. Вывод:

Anna
John
Xander

Обратите внимание, как порядок был изменен по сравнению с порядком, в котором они были первоначально вставлены в массив. Сортировка объектов Employee по их идентификатору сотрудника на основании предыдущего примера с измененной реализацией метода compare() анонимной реализации интерфейса Comparator:

Сортировка объектов Employee по их идентификатору сотрудника на основании предыдущего примера с измененной реализацией метода compare() анонимной реализации интерфейса Comparator:

Employee[] employeeArray = new Employee;

employeeArray = new Employee("Xander", 1);
employeeArray = new Employee("John"  , 3);
employeeArray = new Employee("Anna"  , 2);

java.util.Arrays.sort(employeeArray, new Comparator() {
    @Override
    public int compare(Employee e1, Employee e2) {
        return e1.employeeId - e2.employeeId;
    }
});

for(int i=0; i < employeeArray.length; i++) {
    System.out.println(employeeArray.name);
}

Вывод:

Xander
Anna
John

Чтобы сравнить объекты Employee в массиве сначала по их имени, а если оно совпадает, то по их идентификатору сотрудника, реализация compare():

java.util.Arrays.sort(employeeArray, new Comparator() {
    @Override
    public int compare(Employee e1, Employee e2) {
        int nameDiff = e1.name.compareTo(e2.name);
        if(nameDiff != 0) { return nameDiff; }
    
        return e1.employeeId - e2.employeeId;
    }
});

Сортировка массивов

 Метод  Arrays.sort([]a)

Метод sort() из класса Arrays использует усовершенствованный алгоритм Быстрой сортировки (Quicksort), который эффективен  для большинства  набора данных.  Метод упорядочивает весь массив в порядке возрастания значений элементов.

Формат метода

Arrays.sort([]a),

[]a – исходный массив, после работы метода массив будет содержать упорядоченные значения элементов в порядке возрастания.

Пример.

//исходный массив
double a[] = { 41.5, 11.4, 11.2, 3.1, 4.3, 5.5 };
//сортировка
Arrays.sort(a);
//результат сортировки
for(int i=0; i<a.length; i++)
System.out.print(a+"  ");  //3.1  4.3  5.5  11.2  11.4  41.5 
System.out.println();

 Метод  Arrays.sort([]a,index1,index2)

выполняет сортировку части массива по возрастанию массива от index1 до index2 минус единица

 Формат метода

Arrays.sort([]a,index1,index2),

 []a – исходный массив

index1, index2 — начальный и конечный индексы, определяющие диапазон упорядочивания элементов по возрастанию. 

Пример.

//исходный массив
int b[] ={2,1,0,50,30,20,10};
//сортировка  от 0 элемента до 3, сам третий элемент не входит
Arrays.sort(b,0,3);
//результат сортировки
for(int i=0; i<b.length; i++)
System.out.print(b+"  ");  // 0  1  2  50  30  20  10
System.out.println();
 
//сортировка  элементов от 3 до конца массива bb.length
Arrays.sort(b,3,b.length);
for(int i=0; i<b.length; i++)
System.out.print(b+"  "); //0  1  2  10  20  30  50
System.out.println();

 Сортировка  массива по убыванию

Формат метода

 Arrays.sort([]a, Collections.reverseOrder());

 При сортировке массива в обратном порядке (по убыванию) нужно использовать вместо примитивного типа, объектный тип.

Пример.

//// сортировrка по убыванию
//вместо примитивного типа double
//используем объектный тип   Double
   Double a[] = new Double;
   //заполняем массив случаными числами
   for(int i = 0; i <  a.length; i++) {
     a =  (double)(Math.random() * 20);
      System.out.format("%.2f   ", a);
         }
System.out.println();  
System.out.println("Массив,отсотированный по убыванию");
//Сортируем массив
    Arrays.sort(a, Collections.reverseOrder());
//Выводим отсортированный массив на консоль.
for(int i = 0; i <  a.length; i++) {
     System.out.format("%.2f   ", a);
     }
System.out.println();  

Результат

15,39   1,54   17,47   15,50   3,83   16,43   18,87   15,54   8,23   12,97  

Массив,отсотированный по убыванию

18,87   17,47   16,43   15,54   15,50   15,39   12,97   8,23   3,83   1,54   

Как объявить двумерный массив в Java?

Вместо одной скобки вы будете использовать две, например, int [] [] — двумерный целочисленный массив. Определяется это следующим образом:

int[][] multiples = new int; // 2D integer array 4 строки и 2 столбца 
String[][] cities = new String; // 2D String array 3 строки и 3 столбца

Кстати, когда вы изначально объявляете, вы должны помнить, что нужно указать первое измерение, например, следующее объявление является неверным:

int[][] wrong = new int[][]; // not OK, you must specify 1st dimension 
int[][] right = new int[];

Выражение выдаст ошибку «переменная должна предоставить либо выражения измерения, либо инициализатор массива» во время компиляции. С другой стороны, при заполнении, второе измерение является необязательным и даже если вы не укажете, компилятор не будет ругаться, как показано ниже:

String[][] myArray = new String[]; // OK 
String[][] yourArray = new String; // OK

Потому что двумерный массив не что иное, как массив из одномерных массивов, из-за этого, вы также можете создать двумерный, где отдельные одномерные имеет разную длину, как показано в следующем примере.

class 
TwoDimensionalArray { public static void main(String[] args) {
String[][] salutation = {
{"Mr. ", "Mrs. ", "Ms. "},
{"Kumar"}
};
 // Mr. Kumar
System.out.println(salutation + salutation);
// Mrs. Kumar
System.out.println(salutation + salutation);
    }
}
The output from this program is: 
Mr. Kumar 
Mrs. Kumar

В этом примере вы можете видеть объявление двумерного массива, но его первая строка имеет 3 элемента, а вторая строка имеет только один элемент.

Вы можете получить доступ к элементам, используя оба индекса или только один индекс. Например, salutation представляет единственную строку в Java, в то время как salutation представляет одномерный.

Пока мы только что объявили и создали массив, но не инициализировали. Здесь можно увидеть значения по умолчанию для различных типов.

boolean[][] booleans = new boolean; 
System.out.println("booleans : " + booleans); 
byte[][] bytes = new byte; 
System.out.println("bytes : " + bytes); 
char[][] chars = new char; 
System.out.println("chars : " + (int)chars); 
short[][] shorts = new short; 
System.out.println("short : " + shorts); 
int[][] ints = new int; 
System.out.println("ints : " + ints); 
long[][] longs = new long; 
System.out.println("longs : " + longs); 
float[][] floats = new float; 
System.out.println("floats : " + floats); 
double[][] doubles = new double; 
System.out.println("doubles : " + doubles);
Object[][] objects = new Object; 
System.out.println("objects : " + objects); 
Output booleans : false bytes : 0 chars : 0 short : 0 ints : 0 longs : 0 floats : 0.0 doubles : 0.0 objects : null

Массив символов немного сложнее, потому что, если вы печатаете 0 как символ, он напечатает нулевой символ, и поэтому я использовал его целочисленное значение, приведя к int.

Методы по работе с массивами в языке Java

По сути дела, с элементами массивов можно делать все то же самое что и с другими объектами и примитивными типами.

Допустим, если элементы массива — целочисленный тип данных int, то мы можем добавлять, отнимать, умножать и применять любые другие операции которые мы применяем к числам. То же самое касается строк и других объектов которые находятся в нашем объекте.

В массива есть длина (length). Чтобы ее узнать достаточно вызвать переменную length. Вот как это делается:

В результате, после вызова length в переменную arrayLength будет записана длина нашего charArray. Если мы ее выведем в консоль — получим значение 3.

Чтобы не работать с элементами массива «по одному» можно прибегнуть к помощи циклов. Именно управляя индексом цикла можно получать элементы:

В результате запуска примера выше мы увидим такой результат:


Результат выполнения работы программы массив в Java

Очень часто стоит задача вывести все или часть элементов на экран. Для этого я подготовил отдельную статью: Вывод массива java

Еще советую посмотреть материалы по сортировке массива. Данная тема тоже достаточно актуальна и полезная. Особенно для начинающих программистов.

На этом и закончим знакомство с массивами в языке Java. Сейчас, я предлагаю Вам поискать хорошие задачи на массивы и потренироваться. Ведь именно с темы массивов начинается изучение коллекций которые используются почти в каждой программе.

The Arrays Class

The java.util.Arrays class contains various static methods for sorting and searching arrays, comparing arrays, and filling array elements. These methods are overloaded for all primitive types.

Sr.No. Method & Description
1

public static int binarySearch(Object[] a, Object key)

Searches the specified array of Object ( Byte, Int , double, etc.) for the specified value using the binary search algorithm. The array must be sorted prior to making this call. This returns index of the search key, if it is contained in the list; otherwise, it returns ( – (insertion point &plus; 1)).

2

public static boolean equals(long[] a, long[] a2)

Returns true if the two specified arrays of longs are equal to one another. Two arrays are considered equal if both arrays contain the same number of elements, and all corresponding pairs of elements in the two arrays are equal. This returns true if the two arrays are equal. Same method could be used by all other primitive data types (Byte, short, Int, etc.)

3

public static void fill(int[] a, int val)

Assigns the specified int value to each element of the specified array of ints. The same method could be used by all other primitive data types (Byte, short, Int, etc.)

4

public static void sort(Object[] a)

Sorts the specified array of objects into an ascending order, according to the natural ordering of its elements. The same method could be used by all other primitive data types ( Byte, short, Int, etc.)

Previous Page
Print Page

Next Page  

Ассоциативные массивы в Java

У ассоциативного массива в качестве ключей применяются строки. Мы можем представить его структуру данных в виде совокупности пары «ключ-значение». В таком массиве, как ассоциативный, любое значение связано с конкретным ключом, а доступ к значению производится по имени ключа.

Что касается языка программирования Java, то в нём ассоциативные массивы не поддерживаются. А ведь в некоторых ситуациях, работая с массивами, было бы неплохо обратиться к элементу не по индексу, а по ключу.

Однако есть способ реализовать похожую структуру данных, используя стандартные средства Java SE. В частности, мы можем создать простейший ассоциативный массив, воспользовавшись классом HashMap и установив для его экземпляра строковый тип данных ключа.

Посмотрим, как это работает:

    HashMap<String, Integer> fruits = new HashMap();
fruits.put("Число апельсинов", 5);
fruits.put("Число яблок", 10);
fruits.put("Число мандаринов", 7);
System.out.println(fruits.get("Число мандаринов"));

Мы можем создать ассоциативный массив и с более сложной структурой, поместив объекты HashMap друг в друга и получив тем самым «ассоциативные массивы в ассоциативном массиве». Посмотрим, как это выглядит на практике:

    HashMap<String, Integer> fruits = new HashMap();
fruits.put("Число апельсинов", 5);
fruits.put("Число яблок", 10);
fruits.put("Число мандаринов", 7);
HashMap<String, Integer> milkProducts = new HashMap();
milkProducts.put("Число пачек творога", 2);
milkProducts.put("Число пакетов молока", 3);
milkProducts.put("Число банок сметаны", 17);
HashMap<String, HashMap<String, Integer> > eat = new HashMap();
eat.put("Фрукты", fruits);
eat.put("Молочные продукты", milkProducts);
System.out.println(eat.get("Молочные продукты").get("Число пакетов молока"));

В результате мы решим проблему отсутствия ассоциативных массивов в Java.

При подготовке статьи использовались следующие материалы:
— Java Multidimensional Arrays;
— «Ассоциативные массивы в Java».

Инициализируем двухмерный массив в Java

Давайте посмотрим, как инициализируется многомерный (в нашем случае — двумерный) Java-массив:

int[][] a = {
      {1, 2, 3}, 
      {4, 5, 6, 9}, 
      {7}, 
};

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

Докажем это с помощью кода:

class Two2DArray {
   public static void main(String[] args) {

      int[][] a = {
            {1, 2, 3}, 
            {4, 5, 6, 9}, 
            {7}, 
      };

      System.out.println("Длина ряда № 1: " + alength);
      System.out.println("Длина ряда № 2: " + a1length);
      System.out.println("Длина ряда № 3: " + a2length);
   }
}

Результат будет следующим

Длина ряда 1: 3
Длина ряда 2: 4
Длина ряда 3: 1

Т. к. многомерный массив включает в себя отдельные массивы (a, a и a), мы можем задействовать метод length, чтобы определить длину каждого ряда 2-мерного Java-массива.

Теперь выведем на экран все элементы двумерного массива, используя циклы:

class TwoDArray {
   public static void main(String[] args) {

      int[][] a = {
            {1, -2, 3}, 
            {-4, -5, 6, 9}, 
            {7}, 
      };

     for (int i = ; i < a.length; ++i) {
        for(int j = ; j < ailength; ++j) {
           System.out.println(ai]);
        }
     }
   }
}

Когда надо пройтись по элементам массива, использование цикла for…each — одно из лучших решений. Пример сортировки двухмерного Java-массива мы можем записать посредством цикла for…each таким образом:

class TwoDArray {
   public static void main(String[] args) {

      int[][] a = {
            {1, -2, 3}, 
            {-4, -5, 6, 9}, 
            {7}, 
      };

     for (int[] innerArray a) {
        for(int data innerArray) {
           System.out.println(data);
        }
     }
   }
}

Запустив этот код, мы увидим итог заполнения двумерного Java-массива:

1
-2
3
-4
-5
6
9
7

Массивы в Java — объявление и инициализация массива Java

Оператор, отвечающий за объявление массива Java, похож на любую другую переменную. Он содержит тип данных, после которого следует название массива. Единственное отличие заключается в использовании квадратных скобок рядом с типом данных:

int[] intArray;
float[] floatArray; 
char[] charArray;

Приведённые выше операторы объявления сообщают компилятору, что intArrayvariable – это массив целых чисел, floatArrayis – массив чисел с плавающей запятой, а charArrayis – массив символов.

Как и другие переменные, их нельзя использовать до инициализации и установки значения. В случае с массивом указание значения должно определять размер массива:

intArray = new int;

Число внутри скобок указывает, сколько элементов содержится в массиве. Приведённый выше код создает массив целых чисел, состоящий из 10 элементов.

Объявление и установку размера массива можно сделать в одном выражении:

float[] floatArray = new float;

Массивы не ограничиваются примитивными типами данных. Также можно создавать массив объектов Java (или строк):

String[] names = new String;

Declaring Array Variables

To use an array in a program, you must declare a variable to reference the array, and you must specify the type of array the variable can reference. Here is the syntax for declaring an array variable −

Syntax

dataType[] arrayRefVar;   // preferred way.
or
dataType arrayRefVar[];  // works but not preferred way.

Note − The style dataType[] arrayRefVar is preferred. The style dataType arrayRefVar[] comes from the C/C&plus;&plus; language and was adopted in Java to accommodate C/C&plus;&plus; programmers.

Example

The following code snippets are examples of this syntax −

double[] myList;   // preferred way.
or
double myList[];   // works but not preferred way.

Java массивы

Массив — это структура данных, в которой хранятся величины одинакового типа. Доступ к отдельному элементу массива осуществляется с помощью целого индекса. Например, если а — массив целых чисел, то значение выражения а равно i-му целому числу в массиве.

Массив объявляется следующим образом: сначала указывается тип массива, т.е тип элементов, содержащихся в массиве, за которым ставится пара пустых квадратных скобок, а затем — имя переменной. Например, вот как объявляется массив, состоящий из целых чисел: int[] a;

Однако этот оператор лишь объявляет переменную а, не инициализируя ее настоящим массивом. Чтобы создать массив, нужно применить оператор new.

Этот оператор создает массив, состоящий из 100 целых чисел. Элементы этого массива нумеруются от 0 до 99 (а не от 1 до 100). После создания массив можно заполнять, например, с помощью цикла.

Если вы попытаетесь обратиться к элементу а (или любому другому элементу, индекс которого выходит за пределы диапазона от 0 до 99), создав массив, состоящий из 100 элементов, программа прекратит работу, поскольку возникнет исключительная ситуация, связанная с выходом индекса массива за пределы допустимого диапазона. Чтобы подсчитать количество элементов в массиве, используйте метод имяМасси- ва.length.

Например,

После создания массива изменить его размер невозможно (хотя можно, конечно, изменять отдельные его элементы). Если в ходе выполнения программы необходимо часто изменять размер массива, лучше использовать другую структуру данных, называемую списком массивов (array list).

Массив можно объявить двумя способами:

Большинство программистов на языке Java предпочитают первый стиль, поскольку в нем четче отделяется тип массива int (целочисленный массив) от имени переменной.

Инициализаторы массивов и безымянные массивы

В языке Java есть средство для одновременного создания массива и его инициализации. Вот пример такой синтаксической конструкции:

Отметим, что в этом случае не нужно применять оператор new. Кроме того, можно даже инициализировать безымянный массив:

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

Можно создать массив нулевого размера. Такой массив может оказаться полезным при написании метода, вычисляющего некий массив, который оказывается пустым. Массив нулевой длины объявляется следующим образом:

Заметим, что такой массив не эквивалентен объекту null.

Копирование массивов

Один массив можно скопировать в другой, но при этом обе переменные будут ссылаться на один и тот же массив.

Результат показан на рис. 3.14. Если необходимо скопировать все элементы одного массива в другой, следует использовать метод arraycopy из класса System. Его вызов выглядит следующим образом:

Массив to должен иметь достаточный размер, чтобы в нем поместились все копируемые элементы.

Рис. 3.14. Копирование массива

Например, показанные ниже операторы, результаты работы которых изображены на рис. 3.15, создают два массива, а затем копируют последние четыре элемента первого массива во второй. Копирование начинается со второй позиции в исходном массиве, а копируемые элементы помещаются в целевой массив, начиная с третьей позиции.

Выполнение этих операторов приводит к следующему результату.

Рис. 3.15. Копирование элементов массива

Массив в языке Java значительно отличается от массива в языке C++. Однако он практически совпадает с указателем на динамический массив. Это значит, что оператор

В языке Java оператор no умолчанию проверяет диапазон изменения индексов. Кроме того, в языке Java нет арифметики указателей — нельзя увеличить указатель а, чтобы обратиться к следующему элементу массива.


14.02.2011

Инициализация

Теперь есть два способа инициализировать двумерный массив в Java:

  1. используя литерал массива во время создания.
  2. используя вложенный цикл for.

В следующем примере мы узнаем, как выполнить цикл через двумерный массив, инициализировать каждый элемент и вывести (напечатать).

// initializing two dimensional array as literal 
String[][] names = { 
 {"Sam", "Smith"},
 {"Robert", "Delgro"},
 {"James", "Gosling"},
};
 int[][] board = new int;
 for (int i = 0; i < board.length; i++) {
 for (int j = 0; j < board.length; j++) {
 board = i + j;
 }
                   }

Вам понадобится столько циклов, какова размерность массива. Например, для явной инициализации трехмерного массива потребуются три вложенных цикла for. С другой стороны, для инициализации двумерного массива достаточно двух вложенных циклов for.

Как вывести

Если вы хотите получить доступ к каждому элементу, то вам нужно выполнить итерацию по двумерному массиву, используя два цикла for. Почему? Потому что вам нужно два индекса для доступа к отдельному элементу.

Вы можете использовать расширенный для каждого цикла или классический для цикла со счетчиком. Для того, чтобы напечатать(сделать вывод) содержимое 2D массива, вы можете использовать либо этот метод, либо Arrays.deepToString(), который возвращает строку всех элементов.

import java.util.Arrays;

/**
* Java Program to initialize and print two dimensional array in Java.
*/
class Basics {

public static void main(String args[]) {

// initializing two dimensional array as literal
String[][] names = {
{"John", "Smith"},
{"Javin", "Paul"},
{"James", "Gosling"},
};

// how to initialize two dimensional array in Java
// using for loop
int[][] board = new int;

for (int i = 0; i < board.length; i++) {
for (int j = 0; j < board.length; j++) {
board = i + j;
}
}

// now let's print a two dimensional array in Java
for (int[] a : board) {
for (int i : a) {
System.out.print(i + "\t");
}
System.out.println("\n");
}

// printing 2D array using Arrays.deepToString() method
System.out.println("another way to print 2D arrays");
System.out.println(Arrays.deepToString(board));

}

}
Output:
0 1 2

1 2 3

2 3 4

another way to print 2D arrays
, , ]
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector