Java : массивы и коллекции
Массивы Массивы простых типов: int []a = new int[10]; int []b = new int[]{ 0, 1, 2, 3, 4, 5 }; Массивы ссылочных типов (reference types): Object []c = new Object[10]; Object []d = new Object[]{ new Object(), new Object() }; boolean bResult = c.equals(true); //NullPointerException boolean bResult = d.equals(true); //ok, false
Работа с массивами Добавление элемента – требуется пересоздание с копированием: int []a = new int[10]; … int []temp = new int[ a.length + 1 ]; System.arraycopy( a, 0, temp, 0, a.length ); temp[ temp.length-1 ] = 111; a = temp; А также операции поиска, сортировки и удаления элемента – дополнительный объем кода.
Коллекции Динамическое управление содержимым: – методы add/remove имеют разную реализацию для разных типов коллекций; Возможность использовать оптимальную реализацию общего интерфейса Collection для конкретной задачи: – Использование итераторов на основе различных алгоритмов; Методы преобразования коллекций.
Иерархия классов Collection – интерфейс с общим описанием методов для трех типов коллекций; Set – реализует множество, не может содержать повторяющихся элементов; List – упорядоченный список (последовательность); Queue – очередь (например, для реализации алгоритма FIFO); Map – карта для «значения» по «ключу»; SortedSet – множество, упорядоченное по возрастанию; SortedMap – карта, упорядоченная по возрастанию ключевых значений.
Collection – общие методы для коллекций Добавление: add, addAll Удаление: remove, removeAll, retainAll, clear Поиск: contains, iterator Количество: isEmpty, size Преобразование: toArray() Если требуется преобразование к массиву определенного типа: String []s = collection.toArray( new String[]{} );
Реализация множеств – подклассы Set HashSet – обеспечивает наилучшую производительность, но порядок элементов может меняться во время выполнения; TreeSet – обеспечивает сортировку элементов; LinkedHashSet – обеспечивает сохранение первоначального порядка элементов.
Реализация списков – подклассы List ArrayList – обеспечивает хранение элементов списка в оптимальной для поиска форме; LinkedList – обеспечивает хранение элементов списка в оптимальной форме для удаления/вставки;
Реализация карт – подклассы Map HashMap – обеспечивает наилучшую производительность, порядок элементов может меняться во время выполнения; TreeMap – обеспечивает сортировку элементов по ключам; LinkedHashMap – обеспечивает сохранение первоначального порядка заполнения.
Измерение времени Получить текущее системное время в миллисекундах: long msTime = System.currentTimeMillis();
Задание 1 Разработать программу для тестирования скорости работы с: - массивами (тип int); -списками (java.util.ArrayList, LinkedList); -множествами (java.util.HashSet, java.util.LinkedHashSet). Количество элементов: Начальный размер массива – 1 элемент, на каждой итерации требуется пересоздание массива.
Задание 2 Разработать программу, в методе main которой задается массив строк. Реализовать вывод дублирующихся строк и количество уникальных слов. Использовать интерфейс и подклассы java.util.Set.
Задание 3 Разработать программу, в методе main которой задается массив строк. Реализовать вывод множества дублирующихся слов и множества уникальных слов. Использовать интерфейс и подклассы java.util.Set.
Задание 4 Разработать программу, в методе main которой заполняется список, некоторые значения которого равны null. Реализовать метод заменяющий значения null на заданное в параметре значение. Использовать подклассы java.util.List, а также интерфейс java.util.ListIterator.
Задание 5 Разработать программу, в методе main которой задается массив строк. Реализовать вывод списка слов и количества их повторений в исходном массиве. Использовать подклассы интерфейса java.util.Map.
Справочная информация Учебные материалы по коллекциям: ons/index.html Общие интерфейсы коллекций: ctions/interfaces/index.html Конкретные классы коллекций: ctions/implementations/index.html