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

Массивы и ссылки

Одномерные массивы

Содержание

Объявление

  • int[] ints;
    double[] doubles;
    boolean[] booleans;
    String[] strings;
    

Создание и длина

  • Создание
    ints = new int[10];
    doubles = new double[20];
    booleans = new boolean[30];
    strings = new String[40];
    
  • Длина
    System.out.println(ints.length); // 10
    System.out.println(doubles.length); // 20
    System.out.println(booleans.length); // 30
    System.out.println(strings.length); // 40
    

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

  • По умолчанию
    System.out.println(ints[0]); // 0
    System.out.println(doubles[1]); // 0.0
    System.out.println(booleans[2]); // false
    System.out.println(strings[3]); // null
    
  • При создании
    ints = new int[]{1, 2, 3};
    doubles = new double[]{1};
    booleans = new boolean[]{true, false};
    strings = new String[]{"a", "b", "c"};
    

Итерация

  • for
    // i – index
    for (int i = 0; i < ints.length; i++) {
        System.out.println(ints[i]);
    }
    
  • foreach
    // i – int
    for (int i : ints) {
        System.out.println(i);
    }
    

Многомерные массивы

Содержание

Объявление

  • int[][] ints2d;
    int[][][] ints3d;
    

Создание

  • Полное
    ints2d = new int[10][20];
    ints3d = new int[10][20][30];
    System.out.println(ints2d[0]); // [I...
    System.out.println(ints3d[0]); // [[I...
    
  • Частичное
    ints2d = new int[10][];
    ints3d = new int[10][][];
    System.out.println(ints2d[0]); // null
    System.out.println(ints3d[0]); // null
    

Непрямоугольные массивы

  • Создание
    for (int i = 0; i < ints2d.length; i++) {
        ints2d[i] = new int[i];
    }
    
  • Проверка
    for (int[] row : ints2d) {
        System.out.println(row.length);
    }
    

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

  • Прямоугольные
    int[][] ints2d = new int[][]{{1, 2, 3}, {4, 5, 6}};
    System.out.println(ints2d.length); // 2
    System.out.println(ints2d[0].length); // 3
    System.out.println(ints2d[1].length); // 3
    
  • Непрямоугольные
    int[][] ints2d = new int[][]{{1}, {2, 3}, null};
    System.out.println(ints2d.length); // 3
    System.out.println(ints2d[0].length); // 1
    System.out.println(ints2d[1].length); // 2
    System.out.println(ints2d[2]); // null
    

Ссылки на массивы

Содержание

Cсылки

  • Копия
    int[] as = new int[10];
    int[] bs = as;
    as[1] = 10;
    System.out.println(as[1] + " " + bs[1]); // 10 10
    System.out.println(as == bs); // true
    
  • Двойная инициализация
    bs = as;
    as = new int[10];
    as[1] = 20;
    System.out.println(as[1] + " " + bs[1]); // 20 10
    System.out.println(as == bs); // false
    

Ссылка как аргумент

  • Функция
    void fill(int[] ints, int value) {
        for (int i = 0; i < ints.length; i++) {
            ints[i] = value;
        }
    }
    
  • Применение
    fill(as, 100);
    // 100 100 100
    System.out.println(as[0] + " " + as[1] + " " + as[2]);
    

Передача по значению

  • Функция
    void referenceAsValue(int[] ints) {
        ints = new int[0];
    }
    
  • Применение
    bs = as;
    referenceAsValue(as);
    System.out.println(as == bs); // true
    

Возврат ссылки

  • Функция
    int[] create(int length, int value) {
        int[] ints = new int[length];
        fill(ints, value);
        return ints;
    }
    
  • Применение
    as = create(3, 123);
    System.out.println(as[0] + " " + as[1] + " " + as[2]); 
    // 123 123 123
    

Сборка мусора

  • for (int i = 0; i < 10_000_000; i++) {
        as = new int[1000_000];
    }
    System.out.println("ok");
    
  • В HotSpot требует ~4MB памяти

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

  • as = new int[]{0, 10, 20, 30, 40, 50};
    bs = create(5, -1);
    System.arraycopy(as, 2, bs, 1, 3);
    // bs = {-1, 20, 30, 40, -1}
    

Полные имена классов

Содержание

Полные имена и import

  • int[] as = new int[]{0, 10, 20, 30};
    System.out.println(as);
        // [I@3834d63f
     
    System.out.println(java.util.Arrays.toString(as));
        // [0, 10, 20, 30]
     
    // import java.util.Arrays;
    System.out.println(Arrays.toString(as));
        // [0, 10, 20, 30]
    

Дерево пакетов

  • java – основные классы
    • lang – фундаментальные классы
      • String – строка
      • System – консольный ввод-вывод
      • ...
    • util – вспомогательные классы
      • zip – поддержка Zip и GZip
      • Arrays – операции с массивами
      • Scanner – текстовый ввод
      • ...
  • javax – дополнительные классы
    • crypto – криптография
    • ...

Scanner

  • Создание
  • Методы
  • Пример
    // Стандартный ввод (stdin)
    Scanner scanner = new Scanner(System.in);
    System.out.print("Input two numbers: ");
    int a = scanner.nextInt();
    int b = scanner.nextInt();
    System.out.println("Sum of numbers: " + (a + b));
    

Заключение

Содержание

Литература

  • Русскоязычная
    • Шилдт Г. Java. Полное руководство (глава 3)
    • Эккель Б. Философия Java (глава 16)
  • Англоязычная

Вопросы

???