Performance Test: Map

Продолжаем рассматривать Java Collection Framework (предыдущая статья) и переключаемся на дерево классов Map, а именно на список наиболее распространенных реализаций интерфейса Map. Давайте для начала вспомним как выглядит упрощенная иерархия классов дерева Map.

Screen Shot 2014-07-17 at 9.27.16 PM

Continue reading


    Многострочное сообщение в JOptionPane

    При разработке графического интерфейса на Swing, порой, возникает необходимость выводить небольшие сообщения для пользователя. Для этого уже существует встроенная возможность в виде класса JOptionPane, который содержит массу всевозможных статических методов на все случаи жизни. Он используется, как правило, для коротких сообщений или вопросов в одну строку.

    Например:

    Короткое сообщение

    JOptionPane.showConfirmDialog(MainFrame.this, "Вы уверены, что хотите выйти?", "Выход", JOptionPane.YES_NO_OPTION);

    Continue reading


      Семь советов по написанию чистого кода

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

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

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

      Следует добавить, что большинство людей, похоже, осведомлены о многих из этих правил, в общем смысле. Главная идея в написании этой статьи — убедить людей, что это действительно важно. Фактически, так важно, что вы должны всегда следовать им, и код, который нарушает эти правила, казался бы вам неприемлемым, настолько, что вы бы никогда не написали и строчки такого кода. Некоторые из правил подразумевают написание небольшое количество дополнительного кода, но я думаю я мог бы заявить о том, что ни одно из них не приведет вас к действительной потере времени, в любом проекте.

      Continue reading


        Performance Test: ArrayList, Vector, LinkedList

        В рамках изучение Java Collection Framework в нашей школе, мы решили сделать несколько заметок на закрелепление понимания принципов реализаций структур данных в Java.

        Первыми в обзоре получились: ArrayList, Vector, LinkedList. У нас получилось 5 тестов, которые показывают основные отличия списков от массивов (в случае ArrayList/Vector).

        Итак, какие тесты запускались и что в них происходит.
        Давайте посмотрим на список:

        FillListTest: добавление элементов в начало списка.

        Random random = new Random();
        
        for (int i = 0; i < LIST_LOAD_SIZE; i++) {
        	listToTest.add(0, Integer.toString(random.nextInt(ELEMENTS_RANGE)));
        }

        FillListByIndexTest: добавление элементов по индексу в конец списка.

                Random random = new Random();
        
                for (int i = 0; i < LIST_LOAD_SIZE; i++) {
                    listToTest.add(i, Integer.toString(random.nextInt(ELEMENTS_RANGE)));
                }

        Continue reading


          Простые, но интересные факты о массивах в Java

          Обычные вещи о массиве, о которых можно забыть.

          Массив — это тоже объект. Ведь не зря мы используем оператор new для его инициализации.

          Существуют множественные массивы, которые являются массивами массивов. Из этого следует, что каждый отлельный массив в массиве может иметь свою длинну.

          String tokens = {
                          {"Java", "Joy", "Online"},
                          {"School", "and more"}
          };
          array2d

          А теперь самое интересное, хотя у нас есть метод clone() для массива, мы не сможем скопировать n-мерный массив только этим методом правильно. Нужно использовать принцип глубоко-копирования, чтобы скопировать массив в другую переменную.

          Например, вот так:

          int[][] input = {{6,1}, {10,1}, {1,1}};
          int[][] result = new int[input.length][];
          for (int i = 0; i < input.length; i++) {
              result[i] = input[i].clone();
          }