Что такое зубчатый массив в Java? Примеры зубчатых массивов

Источник: Dzone Используя это учебное руководство, вы научитесь работать с зубчатыми массивами в Java и ознакомитесь с несколькими практическими примерами их использования. Кофе-брейк #273. Что такое зубчатый массив в Java? Примеры зубчатых массивов. Чем отличается interrupted() от isInterrupted() в Java Threads - 1Зубчатый массив (Jagged Array), также известный как массив массивов (array of arrays), представляет собой структуру данных, в которой массив используется для хранения других массивов. Ключевой характеристикой зубчатого массива является то, что каждый элемент основного массива может иметь разные размеры. Это позволяет использовать переменную длину столбцов в двумерной структуре. Чтобы понять концепцию Jagged-массива, давайте рассмотрим пример. Предположим, мы хотим хранить информацию об учениках и их оценках. Мы можем создать зубчатый массив для представления этой структуры данных. Вот как он будет выглядеть: Кофе-брейк #273. Что такое зубчатый массив в Java? Примеры зубчатых массивов. Чем отличается interrupted() от isInterrupted() в Java Threads - 2Преимущество использования зубчатого массива заключается в том, что он обеспечивает гибкость хранения данных, когда количество элементов в каждом подмассиве различно. Это особенно полезно в сценариях, где количество столбцов может различаться, например, при работе с нерегулярными данными или разреженными матрицами. В целом зубчатые массивы предоставляют гибкий способ представления структур данных и работы с ними, где размер каждого измерения может варьироваться, что делает их мощным инструментом в определенных сценариях программирования.

Пример 1

На изображении, показанном выше, мы сначала объявляем двумерный зубчатый массив jagged Array с тремя строками. Однако на этом этапе мы не указываем длину столбцов. Далее мы присваиваем массивы разного размера каждой строке зубчатого массива. В первой строке три элемента, во второй — два элемента, в третьей — четыре элемента. Наконец, мы используем вложенные циклы для перебора jaggedarray и печати его элементов. Внешний цикл перебирает строки, а внутренний цикл перебирает столбцы каждой строки. Имя файла: JaggedArrayExample.java

public class JaggedArrayExample {

    public static void main(String[] args) {

        int[][] jaggedArray = new int[3][];

        

        // Назначение массивов разного размера зубчатому массиву

        jaggedArray[0] = new int[] { 1, 2, 3, 4 };

        jaggedArray[1] = new int[] { 5, 6, 7 };

        jaggedArray[2] = new int[] { 8, 9 };

        

        // Доступ и печать элементов зубчатого массива

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

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

                 System.out.print(jaggedArray[i][j] + " ");

            }

            System.out.println();

        }

    }

}
Вывод:
1 2 3 4 5 6 7 8 9

Пример 2

В приведенном выше коде мы объявляем двумерный массив jaggedArray и инициализируем его именами учащихся разных классов. В первой строке представлены имена учеников первого класса. Во второй строке представлены имена учеников второго класса и так далее. Затем мы используем вложенные циклы для перебора зубчатого массива и вывода имен учащихся в каждом классе. Внешний цикл перебирает строки (оценки), а внутренний цикл перебирает столбцы каждого класса (учащиеся). Имя файла: JaggedArrayExample.java

public class JaggedArrayExample {

     public static void main(String[] args) {

        // Объявляем и инициализируем двумерный зубчатый массив для хранения имен учащихся разных классов.

        String[][] jaggedArray = {

            { "Ram", "Laxman" },                           // Grade 1 students

            { "Rahul", "Gauri", "Komal" },                // Grade 2 students

            { "Ajinkya", "Virat", "Tejaswi", "Sanju" }      // Grade 3 students

        };

        

        // Доступ и печать элементов зубчатого массива

        for (int i = 0; i < jaggedArray.length; i++) {   // Iterate over the rows (grades)

            System.out.print("Grade " + (i + 1) + " students: ");

            for (int j = 0; j < jaggedArray[i].length; j++) {  // Iterate over the columns (students) of each grade

                 System.out.print(jaggedArray[i][j] + " ");    // Печать имени каждого ученика

            }

            System.out.println();   // Переход на следующую строку после печати имен учащихся в классе.

        }

     }

}
Вывод:
Grade 1 students: Ram Laxman Grade 2 students: Rahul Gauri Komal Grade 3 students: Ajinkya Virat Tejaswi Sanju

Пример 3

В приведенном выше коде у нас есть зубчатый массив jaggedArray, который хранит разные числа в каждой строке. В первой строке три элемента, во второй строке два элемента, в третьей строке четыре элемента и в четвертой строке один элемент. Затем мы используем вложенные циклы для перебора зубчатого массива и вычисления суммы каждой строки. Внешний цикл перебирает строки, а внутренний цикл перебирает столбцы каждой строки. Сумма каждой строки рассчитывается путем сложения всех элементов в этой строке. Имя файла: JaggedArrayExample.java

public class JaggedArrayExample {

     public static void main(String[] args) {

        int[][] jaggedArray = {

            { 1, 2, 3 },      // Первая строка с тремя элементами

            { 4, 5 },         // Вторая строка с двумя элементами

            { 6, 7, 8, 9 },   // Третья строка с четырьмя элементами

            { 10 }            // Четвертая строка с одним элементом

        };

        

        // Вычисляем сумму каждой строки и объявляем результаты

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

            int rowSum = 0;

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

                rowSum += jaggedArray[i][j];

            }

            System.out.println("Sum of row " + (i + 1) + ": " + rowSum);

        }

     }

}
Вывод:
Sum of row 1: 6 Sum of row 2: 9 Sum of row 3: 30 Sum of row 4: 10

Чем отличается interrupted() от isInterrupted() в Java Threads

Источник: Medium Это руководство поможет вам лучше понять, чем метод interrupted() отличается от метода isInterrupted(), и когда они оба применяются в коде Java. Interrupted: это метод в Java, который проверяет, прерван поток или нет, и возвращает логическое значение, после которого он меняет свое значение с true на false, если значение уже истинно (true). IsInterrupted: это метод, который проверяет значение и никогда не меняет его. То есть, если статус равен true, он останется истинным, но interrupted() изменится с true на false. Пример кода:

class interruption extends Thread{
    public void run(){
        try{
        System.out.println("isInterrupted() = "+Thread.currentThread().isInterrupted());
        System.out.println("interrupted() = "+Thread.interrupted());
        System.out.println("isInterrupted() = "+Thread.currentThread().isInterrupted());
        Thread.sleep(1000);
        }
        catch(Exception e){
            System.out.println("Error found");
        }
        
    }
}

class ThisIsMain {
    public static void main(String[] args) throws InterruptedException {
        interruption i=new interruption();
        i.start();
        i.interrupt();

    }
}
Вывод:
isInterrupted() = true interrupted() = false isInterrupted() = false
  • Первое значение isInterrupted() возвращает значение true.
  • Метод interrupted() вызывает это возвращенное значение true, а затем меняет его на false.
  • Первое значение isInterrupted() возвращает значение false, поскольку interrupted() изменило его.
  • Почему нет ошибки? Потому что вызов метода interrupted() изменил статус на false перед вызовом sleep(1000).

Реализация методов:


public static boolean interrupted(){};
public boolean isInterrupted(){}
  • interrupted() — статический метод, поэтому его можно вызвать напрямую, используя класс Thread.
  • isInterrupted() — нестатический метод.