Полный справочник по Java. Java SE 6 Edition (2007) » База РуНет — Зеркало xtreme.rip Информационно
Advanced SystemCare Ultimate 12.0.1.92Advanced SystemCare Ultimate — комплексная забота о состоянии вашего компьютера. Антивирус с движком Bitdefender, защита от вредоносных сайтов и загрузок, монитор ресурсов и …
Adobe Captivate 2019 11.0.1.266
Adobe Captivate 2019 позволяет создавать все виды полностью адаптивного контента для электронных учебных курсов. С помощью Adobe Captivate 2019 можно без труда разрабатывать …
AdminPE 4.3 (RUS/2019)
AdminPE — сборка, представляющая собой загрузочную флешку с возможностью загрузки на компьютерах и по локальной сети для работы с автономной ОС Windows 8.1, и содержащая большое …
The KMPlayer 4.2.2.20 repack by Cuta (build 2)
The KMPlayer — мощный,практичный, удобный мультимедийный плеер, рассчитанный для воспроизведения аудио/видеофайлов почти всех возможных форматов. Убедиться в этом и проверить его …
Vectric Aspire 9.510 + Rus + Clipart
Vectric Aspire — среда трехмерного моделирования, которая используется для разработки и вытачивания трехмерных деталей. Ключевой особенностью программы является возможность …
OnlineTV Anytime Edition 15.18.12.1
OnlineTV — фантастический мир телевизионных развлечений на вашем компьютере. Теперь у вас есть свободный доступ к 10000+ онлайн тв и радио станций, через потоковое интернет …
Windows 7 SP1-U with IE11 x86/x64 6in2 DG Win&Soft 2018.12 (ENG/RUS/UKR)
Сборки созданы на основе оригинальных образах от Microsoft. Включают в себя три редакции: Windows 7 Home Premium, Windows 7 Professional, Windows 7 Ultimate с интегрированными …
Total Commander Ultima Prime 7.5
Total Commander Ultima Prime — это набор утилит и разнообразных наборов настроек, собранных в один установочный пакет для расширения функциональности файлового менеджера Total …
Iceni Technology Infix PDF Editor Pro 7.3.2
Infix PDF Editor — программа позволяет редактировать и переформатировать текст в любых PDF-файлах (даже в нескольких колонках), манипулировать графикой, изображениями и страницами.
Навител Навигатор v 9.10.1974 Android с ключом + Альтернативные скины
Активированная версия с ключом Навител Навигатор v9.10 для Андроид.
Kerish Doctor 2018 4.70 (DC 31.12.2018)
Версия с обновленным лекарством и цифровой подписью от 31.12.2018 Kerish Doctor проводит полноценную чистку ПК от «мусора», устраняет ошибки, повышая производительность устройства …
MOBILedit! Forensic 10.0.1.25088
MOBILedit — представляет собой новое приложение, которое позволяет управлять сотовым телефоном с персонального компьютера. Мобильный должен быть подключен через ИК-порт, Блютуз …
Java по-русски. Часть первая: Книги / Хабр
Не так давно я проводил опрос «Какие материалы о Java вас интересуют на русском языке?» среди посетителей Хабра. Вторым этапом моего исследования будет обзор существующих русско-язычных ресурсов.Книги
За 2009 на Ozon.ru можно найти 8 книг по Java (всего за последние 3 года их вышло 22 — примерно по 7 в год, на books.ru набор примерно такой же, так что наша выборка довольно репрезентативна). Посмотрим, что это за книги?
Java EE
«Программирование web-приложений на языке Java» от Буди Курняван, «Технологии программирования на Java 2. Распределенные приложения» от Х. М. Дейтел, П. Дж. Дейтел, С. И. Сантри и «Java сервлеты и JSP. Сборник рецептов» Брюс Перри. Выпущены они были в 2002, 2001 и 2004 годах и современные Java EE(5 версия вышла в 2006, к концу 2009 выходит 6) технологии и фреймворки(EJB 3, JPA, JSF, Spring, Hibernate, Dependency Injection) никак не покрывают, поэтому говорить что-то о них смысла попросту нет.
Java SE
Здесь авторы куда более именитые. Все 4 книги в принципе можно рекомендовать как начальные, хотя я бы посоветовал Хорстманна.
«Философия Java» Брюс Эккель. По праву считается одной из лучших книг по Java(русское издание даже идёт с логотипом Luxoft), но к сожалению перевод страдает не только качеством(судя по отзывам на books.ru), а и урезанным содержанием: 640 страниц против 1150 в оригинале.
«Java 2. Библиотека профессионала. Том 2. Тонкости программирования» Кей Хорстманн, Гари Корнелл. Это второй том книги, которую можно назвать учебником от создателя(Sun Press). Первый том книги вышел в прошлом году, а задержка перевода составляет всего год. Наверное, это самый полный и актуальный(отражающий 6 версию) учебник по Java SE.
«Java. Руководство для начинающих» Герберт Шилдт. Треть всех книг по Java за последние 3 года именно от этого автора. Так же у этой книги самый большой тираж — 3000 экземпляров. Популярны и его книги по C++ & C#(уж не знаю, как ему удаётся писать по 3-4 книге в год по разным технологиям), поэтому наверное много программистов, переходящих с этих технологий на Java, выбирают именно его: знакомая фамилия как-никак.
«Язык программирования Java и среда NetBeans» В. Монахов. Курс лекций СПбГУ, содержит обзор практически всех технологий компании Sun: Java, Netbeans, Java ME/SE/EE. Так что если вы хотите познакомится с платформой в целом — это ваш выбор. Правда в свете недавнего приобретения Sun компанией Oracle, будущее инструментов, используемых в книге, неизвестно.
Java ME
Единственная книжка по Java ME за этот год — Майкл Моррисон «Java 2 Me. Программирование игр для мобильных телефонов»
Итог
Довольно широкий выбор книжек по Java SE: совеременные издания, которые позволяют вам даже поэстетствовать при выборе автора. К сожалению, не всегда удачный перевод.
ШОК: Практически полное отсутствие книжек по технологии Java EE: единственная книга, стоящая покупки за последние 4 года: Дэвид Гери, Кей Хорстманн «JavaServer Faces»(что интересно: английское издание на Ozon стоит в 3 раза дороже, чем на Amazon). По Java ME ситуация схожая, хотя технология эта уже не так популярна у начинающих разработчиков, которые смотрят в сторону iPhone & Android.
habr.com
Справочник по Java Collections Framework / Хабр
Данная публикация не является полным разбором или анализом (не покрывает пакетjava.util.concurrent). Это, скорее, справочник, который поможет начинающим разработчикам понять ключевые отличия одних коллекций от других, а более опытным разработчикам просто освежить материал в памяти.Что такое Java Collections Framework?
Java Collection Framework — иерархия интерфейсов и их реализаций, которая является частью JDK и позволяет разработчику пользоваться большим количесвом структур данных из «коробки».
Базовые понятия
На вершине иерархии в Java Collection Framework располагаются 2 интерфейса:
Collection и Map. Эти интерфейсы разделяют все коллекции, входящие во фреймворк на две части по типу хранения данных: простые последовательные наборы элементов и наборы пар «ключ — значение» (словари).
Collection — этот интерфейс находится в составе JDK c версии 1.2 и определяет основные методы работы с простыми наборами элементов, которые будут общими для всех его реализаций (например size(), isEmpty(), add(E e) и др.). Интерфейс был слегка доработан с приходом дженериков в Java 1.5. Так же в версии Java 8 было добавлено несколько новых метода для работы с лямбдами (такие как stream(), parallelStream(), и др.).
Важно также отметить, что эти медоды были реализованы непосредственно в интерфейсе как default-медоды.
Map. Данный интерфейс также находится в составе JDK c версии 1.2 и предоставляет разработчику базовые методы для работы с данными вида «ключ — значение».Также как и Collection, он был дополнен дженериками в версии Java 1.5 и в версии Java 8 появились дополнительные методы для работы с лямбдами, а также методы, которые зачастую реализовались в логике приложения (getOrDefault(Object key, V defaultValue), putIfAbsent(K key, V value)).
Интерфейс Map [doc]

Hashtable — реализация такой структуры данных, как хэш-таблица. Она не позволяет использовать null в качестве значения или ключа. Эта коллекция была реализована раньше, чем Java Collection Framework, но в последствии была включена в его состав. Как и другие коллекции из Java 1.0, Hashtable является синхронизированной (почти все методы помечены как synchronized). Из-за этой особенности у неё имеются существенные проблемы с производительностью и, начиная с Java 1.2, в большинстве случаев рекомендуется использовать другие реализации интерфейса Map ввиду отсутствия у них синхронизации.
HashMap — коллекция является альтернативой Hashtable. Двумя основными отличиями от Hashtable являются то, что HashMap не синхронизирована и HashMap позволяет использовать null как в качестве ключа, так и значения. Так же как и Hashtable, данная коллекция не является упорядоченной: порядок хранения элементов зависит от хэш-функции. Добавление элемента выполняется за константное время O(1), но время удаления, получения зависит от распределения хэш-функции. В идеале является константным, но может быть и линейным O(n). Более подробную информацию о HashMap можно почитать здесь (актуально для Java < 8).
LinkedHashMap — это упорядоченная реализация хэш-таблицы. Здесь, в отличии от HashMap, порядок итерирования равен порядку добавления элементов. Данная особенность достигается благодаря двунаправленным связям между элементами (аналогично LinkedList). Но это преимущество имеет также и недостаток — увеличение памяти, которое занимет коллекция. Более подробная информация изложена в этой статье.
TreeMap — реализация Map основанная на красно-чёрных деревьях. Как и LinkedHashMap является упорядоченной. По-умолчанию, коллекция сортируется по ключам с использованием принципа «natural ordering», но это поведение может быть настроено под конкретную задачу при помощи объекта Comparator, которые указывается в качестве параметра при создании объекта TreeMap.
WeakHashMap — реализация хэш-таблицы, которая организована с использованием weak references. Другими словами, Garbage Collector автоматически удалит элемент из коллекции при следующей сборке мусора, если на ключ этого элеметна нет жёстких ссылок.
Интерфейс List [doc]

Реализации этого интерфейса представляют собой упорядоченные коллекции. Кроме того, разработчику предоставляется возможность доступа к элементам коллекции по индексу и по значению (так как реализации позволяют хранить дубликаты, результатом поиска по значению будет первое найденное вхождение).
Vector — реализация динамического массива объектов. Позволяет хранить любые данные, включая null в качестве элемента. Vector появился в JDK версии Java 1.0, но как и Hashtable, эту коллекцию не рекомендуется использовать, если не требуется достижения потокобезопасности. Потому как в Vector, в отличии от других реализаций List, все операции с данными являются синхронизированными. В качестве альтернативы часто применяется аналог — ArrayList.
Stack — данная коллекция является расширением коллекции Vector. Была добавлена в Java 1.0 как реализация стека LIFO (last-in-first-out). Является частично синхронизированной коллекцией (кроме метода добавления push()). После добавления в Java 1.6 интерфейса Deque, рекомендуется использовать именно реализации этого интерфейса, например ArrayDeque.
ArrayList — как и Vector является реализацией динамического массива объектов. Позволяет хранить любые данные, включая null в качестве элемента. Как можно догадаться из названия, его реализация основана на обычном массиве. Данную реализацию следует применять, если в процессе работы с коллекцией предплагается частое обращение к элементам по индексу. Из-за особенностей реализации поиндексное обращение к элементам выполняется за константное время O(1). Но данную коллекцию рекомендуется избегать, если требуется частое удаление/добавление элементов в середину коллекции. Подробный анализ и описание можно почитать в этом хабратопике.
LinkedList — ещё одина реализация List. Позволяет хранить любые данные, включая null. Особенностью реализации данной коллекции является то, что в её основе лежит двунаправленный связный список (каждый элемент имеет ссылку на предыдущий и следующий). Благодаря этому, добавление и удаление из середины, доступ по индексу, значению происходит за линейное время O(n), а из начала и конца за константное O(1). Так же, ввиду реализации, данную коллекцию можно использовать как стек или очередь. Для этого в ней реализованы соответсвующие методы. На Хабре также есть статья с подробным анализом и описанием этой коллекции.
Интерфейс Set [doc]

Представляет собой неупорядоченную коллекцию, которая не может содержать дублирующиеся данные. Является программной моделью математического понятия «множество».
HashSet — реализация интерфейса Set, базирующаяся на HashMap. Внутри использует объект HashMap для хранения данных. В качестве ключа используется добавляемый элемент, а в качестве значения — объект-пустышка (new Object()). Из-за особенностей реализации порядок элементов не гарантируется при добавлении.
LinkedHashSet — отличается от HashSet только тем, что в основе лежит LinkedHashMap вместо HashSet. Благодаря этому отличию порядок элементов при обходе коллекции является идентичным порядку добавления элементов.
TreeSet — аналогично другим классам-реализациям интерфейса Set содержит в себе объект NavigableMap, что и обуславливает его поведение. Предоставляет возможность управлять порядком элементов в коллекции при помощи объекта Comparator, либо сохраняет элементы с использованием «natural ordering».
Интерфейс Queue [doc]

Этот интерфейс описывает коллекции с предопределённым способом вставки и извлечения элементов, а именно — очереди FIFO (first-in-first-out). Помимо методов, определённых в интерфейсе Collection, определяет дополнительные методы для извлечения и добавления элементов в очередь. Большинство реализаций данного интерфейса находится в пакете java.util.concurrent и подробно рассматриваются в данном обзоре.
PriorityQueue — является единственной прямой реализацией интерфейса Queue (была добавлена, как и интерфейс Queue, в Java 1.5), не считая класса LinkedList, который так же реализует этот интерфейс, но был реализован намного раньше. Особенностью данной очереди является возможность управления порядком элементов. По-умолчанию, элементы сортируются с использованием «natural ordering», но это поведение может быть переопределено при помощи объекта Comparator, который задаётся при создании очереди. Данная коллекция не поддерживает null в качестве элементов.
ArrayDeque — реализация интерфейса Deque, который расширяет интерфейс Queue методами, позволяющими реализовать конструкцию вида LIFO (last-in-first-out). Интерфейс Deque и реализация ArrayDeque были добавлены в Java 1.6. Эта коллекция представляет собой реализацию с использованием массивов, подобно ArrayList, но не позволяет обращаться к элементам по индексу и хранение null. Как заявлено в документации, коллекция работает быстрее чем Stack, если используется как LIFO коллекция, а также быстрее чем LinkedList, если используется как FIFO.
Заключение
Java Collections Framework содержит большое количество различных структур данных, доступных в JDK «из коробки», которые в большинстве случаев покрывают все потребности при реализации логики приложения. Сравнение временных характеристик основных коллекций, которые зачастую используются в разработке приложений приведено в таблице:

При необходимости, разработчик может создать собственную реализацию, расширив или переопределив существующую логику, либо создав свою собственную реализацию подходящего интерфейса с нуля. Также существует некоторое количество готовых решений, которые являются альтернативой или дополнением к Java Collections Framework. Наиболее популярными являются Google Guava и Commons Collections.
В дополнение, хотелось бы указать в качестве дополнительного материала, ссылку на обзор пакета java.util.concurrent. Который является отличным дополнением к изложенному материалу.
habr.com
Полный справочник по Java — 21 Ноября 2011
Содержание:Об авторе
Предисловие
Книга для всех программистов
Что внутри
Коды примеров доступны в Web
Особые благодарности
Для дальнейшего изучения
От издательства
Часть I. Язык Java
Глава 1. История и развитие языка Java
Происхождение языка Java
Зарождение современного программирования: язык С
Следующий шаг: язык C++
Предпосылки к созданию языка Java
Создание языка Java
Связь с языком С#
Как язык Java изменил Internet
Аплеты Java
Безопасность
Переносимость
Магия Java: байт-код
Сервлеты: серверные Java-программы
Терминология, связанная с Java
Простота
Объектная ориентированность
Устойчивость
Многопоточность
Архитектурная нейтральность
Интерпретируемость и высокая производительность
Распределенность
Динамический характер
Эволюция языка Java
Java SE 6
Культура инновации
Глава 2. Обзор языка Java
Объектно-ориентированное программирование
Две концепции
Абстракция
Три принципа ООП
Первый пример простой программы
Ввод кода программы
Компиляция программы
Более подробное рассмотрение первого примера программы
Второй пример короткой программы
Два управляющих оператора
Оператор if
Цикл for
Использование блоков кода
Вопросы лексики
Пробел
Идентификаторы
Константы
Комментарии
Разделители
Ключевые слова Java
Библиотеки классов Java
Глава 3. Типы данных, переменные и массивы
Java — строго типизированный язык
Элементарные типы
Целочисленные значения
byte
short
int
long
Типы с плавающей точкой
float
double
Символы
Булевские значения
Более подробное рассмотрение констант
Целочисленные константы
Константы с плавающей точкой
Булевские константы
Символьные константы
Строковые константы
Переменные
Объявление переменной
Динамическая инициализация
Область определения и время существования переменных
Преобразование и приведение типов
Автоматическое преобразование типов в Java
Приведение несовместимых типов
Автоматическое повышение типа в выражениях
Правила повышения типа
Массивы
Одномерные массивы
Многомерные массивы
Альтернативный синтаксис объявления массивов
Несколько слов о строках
Замечание по поводу указателей для программистов на C/C++
Глава 4. Операции
Арифметические операции
Основные арифметические операции
Операция деления по модулю
Составные арифметические операции с присваиванием
Инкремент и декремент
Побитовые операции
Побитовые логические операции
Сдвиг влево
Сдвиг вправо
Сдвиг право без учета знака
Операции сравнения
Булевские логические операции
Замыкающие логические операции
Операция присваивания
Операция ?
Приоритеты операций
Использование круглых скобок
Глава 5. Управляющие операторы
Операторы выбора
Оператор if
Оператор switch
Операторы цикла
Цикл while
Цикл do-while
Цикл for
Вложенные циклы
Операторы перехода
Использование оператора break
Использование оператора continue
Оператор return
Глава 6. Знакомство с классами
Основы классов
Общая форма класса
Простой класс
Объявление объектов
Более подробное рассмотрение операции new
Присваивание переменных объектных ссылок
Знакомство с методами
Добавление метода к классу Box
Возвращение значения
Добавление метода, принимающего параметры
Конструкторы
Конструкторы с параметрами
Ключевое слово this
Сокрытие переменной экземпляра
Сборка мусора
Метод finalize()
Класс Stack
Глава 7. Более пристальный взгляд на методы и классы
Перегрузка методов
Перегрузка конструкторов
Использование объектов в качестве параметров
Более пристальный взгляд на передачу аргументов
Возврат объектов
Рекурсия
Введение в управление доступом
Что такое static
Знакомство с ключевым словом final
Повторное рассмотрение массивов
Представление вложенных и внутренних классов
Описание класса String
Использование аргументов командной строки
Varargs: аргументы переменной длины
Перегрузка методов vararg
Параметры переменной длины и неопределенность
Глава 8. Наследование
Основы наследования
Доступ к членам и наследование
Более реальный пример
Переменная суперкласса может ссылаться на объект подкласса
Использование ключевого слова super
Использование ключевого слова super для вызова конструкторов суперкласса
Второе применение ключевого слова super
Создание многоуровневой иерархии
Порядок вызова конструкторов
Переопределение методов
Динамическая диспетчеризация методов
Для чего нужны переопределенные методы?
Использование переопределения методов
Использование абстрактных классов
Использование ключевого слова final в сочетании с наследованием
Использование ключевого слова final для предотвращения переопределения
Использование ключевого слова final для предотвращения наследования
Класс Object
Глава 9. Пакеты и интерфейсы
Пакеты
Определение пакета
Поиск пакетов и переменная среды CLASSPATH
Краткий пример пакета
Защита доступа
Пример защиты доступа
Импорт пакетов
Интерфейсы
Определение интерфейса
Реализация интерфейсов
Доступ к реализациям через ссылки на интерфейсы
Вложенные интерфейсы
Использование интерфейсов
Переменные в интерфейсах
Возможность расширения интерфейсов
Глава 10. Обработка исключений
Основы обработки исключений
Типы исключений
Необработанные исключения
Использование try и catch
Отображение описания исключения
Множественные операторы catch
Вложенные операторы try
throw
throws
finally
Встроенные исключения Java
Создание собственных подклассов исключений
Сцепленные исключения
Использование исключений
Глава 11. Многопоточное программирование
Модель потоков Java
Приоритеты потоков
Синхронизация
Обмен сообщениями
Класс Thread и интерфейс Runnable
Главный поток
Создание потока
Реализация Runnable
Расширение Thread
Выбор подхода
Создание множества потоков
Использование isAlive() и join()
Приоритеты потоков
Синхронизация
Использование синхронизированных методов
Оператор synchronized
Межпотоковые коммуникации
Взаимная блокировка
Приостановка, возобновление и останов потоков
Приостановка, возобновление и останов потоков в Java 1.1 и более ранних версиях
Современный способ приостановки, возобновления и остановки потоков
Использование многопоточности
Глава 12. Перечисления, автоупаковка и аннотации (метаданные)
Перечисления
Основные понятия о перечислениях
Методы values() и valueOf()
Перечисления в Java являются типами классов
Перечисления наследуются от Enum
Еще один пример перечисления
Оболочки типов
Character
Boolean
Оболочки числовых типов
Автоупаковка
Автоупаковка и методы
Автоупаковка/распаковка происходит в выражениях
Автоупаковка/распаковка значений Boolean и Character
Автоупаковка/распаковка помогает предотвратить ошибки
Предостережения
Аннотации (метаданные)
Основы аннотирования
Спецификация политики удержания
Получение аннотаций во время выполнения с использованием рефлексии
Второй пример применения рефлексии
Получение всех аннотаций
Интерфейс AnnotatedElement
Использование значений по умолчанию
Аннотация-маркер
Одночленные аннотации
Встроенные аннотации
Некоторые ограничения
Глава 13. Ввод-вывод, аплеты и другие темы
Основы ввода-вывода
Потоки
Байтовые и символьные потоки
Классы байтовых потоков
Классы символьных потоков
Предопределенные потоки
Чтение консольного ввода
Чтение символов
Чтение строк
Запись консольного вывода
Класс PrintWriter
Чтение и запись файлов
Основы организации аплетов
Модификаторы transient и volatile
Использование instanceof
strictfp
Родные методы
Проблемы, связанные с родными методами
Использование assert
Опции включения и отключения утверждений
Статический импорт
Вызов перегруженных конструкторов через this()
Глава 14. Обобщения
Что такое обобщения?
Простой пример обобщения
Обобщения работают только с объектами
Обобщенные типы отличаются в зависимости от типов-аргументов
Обобщения повышают безопасность типов
Обобщенный класс с двумя параметрами типа
Общая форма обобщенного класса
Ограниченные типы
Использование шаблонных аргументов
Ограниченные шаблоны
Создание обобщенного метода
Обобщенные конструкторы
Обобщенные интерфейсы
Raw-типы и унаследованный код
Иерархии обобщенных классов
Использование обобщенного суперкласса
Обобщенный подкласс
Сравнение типов обобщенной иерархии во время выполнения
Приведение
Переопределение методов в обобщенном классе
Очистка
Методы-мосты
Ошибки неоднозначности
Некоторые ограничения обобщений
Нельзя создавать экземпляр типа параметра
Ограничения на статические члены
Ограничения обобщенных массивов
Ограничения обобщенных исключений
Заключительные мысли по поводу обобщений
Часть II. Библиотека Java
Глава 15. Обработка строк
Конструкторы строк
Конструкторы строк, добавленные в J2SE 5
Длина строки
Специальные строковые операции
Строковые литералы
Конкатенация строк
Конкатенация строк с другими типами данных
Преобразование строк и toString()
Извлечение символов
charAt()
getChars()
getBytes()
toCharArray()
Сравнение строк
equals() и equalsIgnoreCase()
regionMatches()
startsWith() и endsWith()
Сравнение equals() и операции ==
compareTo()
Поиск строк
Модификация строк
substring()
concat()
replace()
trim ()
Преобразование данных с помощью valueOf()
Изменение регистра символов в строке
Дополнительные методы String
StringBuffer
Конструкторы StringBuffer
length() и capacity()
ensureCapacity()
setLength()
charAt() и setCharAt()
getChars()
append()
insert()
reverse()
delete() и deleteCharAt()
replace()
substring()
Дополнительные методы StringBuffer
StringBuilder
Глава 16. Пакет java.lang
Оболочки примитивных типов
Number
Double и Float
islnfinite() и isNaN()
Byte, Short, Integer и Long
Преобразование чисел в строки и обратно
Character
Дополнения к Character для поддержки кодовых точек Unicode
Boolean
Void
Process
Runtime
Управление памятью
Выполнение других программ
ProcessBuilder
System
Использование currentTimeMills() для измерения времени выполнения программы
Использование аггаусору ()
Свойства окружения
Object
Использование clone() и интерфейса Cloneable
Class
ClassLoader
Math
Трансцендентные функции
Экспоненциальные функции
Функции округления
Прочие методы Math
StrictMath
Compiler
Thread, ThreadGroup и Runnable
Интерфейс Runnable
Thread
ThreadGroup
ThreadLocalи InheritableThreadLocal
Package
RuntimePermission
Throwable
SecurityManager
StackTraceElement
Enum
Интерфейс CharSequence
Интерфейс Comparable
Интерфейс Appendable
Интерфейс Iter able
Интерфейс Readable
Вложенные пакеты j ava.lang
java.lang.annotation
java.lang. instrument
java.lang.management
java.lang.ref
java.lang.reflect
Глава 17. java.util: каркас коллекций
Обзор коллекций
Последние изменения в коллекциях
Обобщенные определения фундаментально изменяют систему коллекций
Средства автоматической упаковки используют примитивные типы
Стиль цикла «for-each»
Интерфейсы коллекций
Интерфейс Collection
Интерфейс List
Интерфейс Set
Интерфейс SortedSet
Интерфейс NavigableSet
Интерфейс Queue
Интерфейс Dequeue
Классы коллекций
Класс ArrayList
Класс LinkedList
Класс HashSet
Класс LinkedHashSet
Класс TreeSet
Класс PriorityQueue
Класс ArrayDeque
Класс EnumSet
Доступ к коллекциям через итератор
Использование Iterator
Версия «for-each» цикла for как альтернатива итераторам
Использование пользовательских классов в коллекциях
Интерфейс RandomAccess
Работа с картами
Интерфейсы Map
Классы Map
Компараторы
Использование компараторов
Алгоритмы коллекций
Arrays
Зачем нужны обобщенные коллекции?
Унаследованные классы и интерфейсы
Интерфейс Enumeration
Vector
Stack
Dictionary
Hashtable
Properties
Использование store () и load ()
Заключительные соображения по поводу коллекций
Глава 18. java.util: прочие служебные классы
StringTokenizer
BitSet
Date
Calendar
GregorianCalendar
TimeZone
SimpleTimeZone
Locale
Random
Observable
Интерфейс Observer
Пример использования Ob s e rve г
Timer и TimerTask
Currency
Formatter
Конструкторы Formatter
Методы Formatter
Основы форматирования
Форматирование строк и символов
Форматирование чисел
Форматирование времени и даты
Спецификаторы %n и %%
Указание минимальной ширины поля
Указание точности
Использование флагов формата
Выравнивание вывода
Флаги пробела, +, 0 и (
Флаг «запятая»
Флаг #
Опция верхнего регистра
Использование индекса аргументов
Подключение Java-функции printf()
Scanner
Конструкторы Scanner
Основы сканирования
Некоторые примеры применения Scanner —
Установка разделителей
Прочие возможности Scanner
Классы ResourceBundle, ListResourceBundle и PropertyResourceBundle
Прочие служебные классы и интерфейсы
Вложенные пакеты j ava.util
java.util.concurrent, java.util.concurrent.atomic, java.util.concurrent.locks
java.util.jar
java.util.logging
java.util.prefs
java.util.regex
java.util.spi
java.util.zip
Глава 19. Ввод-вывод: пакет java.io
Классы и интерфейсы ввода-вывода Java
File
Каталоги
Использование FilenameFilter
Альтернатива — listFiles()
Создание каталогов
Интерфейсы Closeable и Flushable
Класс Stream
Байтовые потоки
InputStream
OutputStream
FilelnputStream
FileOutputStream
ByteArraylnputStream
ByteArrayOutputStream
Фильтруемые потоки байтов
Буферизуемые потоки байтов
Символьные потоки
Reader
Writer
FileReader
FileWriter
CharArrayReader
CharArrayWriter
BufferedReader
BufferedWriter
PushbackReader
PrintWriter
Класс Console
Использование потокового ввода-вывода
Усовершенствование wc() применением StreamTokenizer
Сериализация
Serializable
Externalizable
ObjectOutput
ObjectOutputStream
Objectlnput
ObjectlnputStream
Пример сериализации
Преимущества потоков
Глава 20. Сеть
Основы работы с сетью
Сетевые классы и интерфейсы
InetAddress
Методы-фабрики
Методы экземпляра
Inet4Address и Inet6Address
Клиентские сокеты TCP/IP
Класс URL
URLConnection
HttpURLConnection
Класс URI
Cookie-наборы
Серверные сокеты TCP/IP
Дейтаграммы
DatagramSocket
DatagramPacket
Пример работы с дейтаграммами
Глава 21. Класс Applet
Два типа аплетов
Основы аплетов
Класс Applet
Архитектура аплетов
Скелет аплета
Инициализация и прекращение работы аплета
Переопределение update()
Простые методы отображения аплетов
Запрос перерисовки
Простой аплет с баннером
Использование строки состояния
HTML-дескриптор APPLET
Передача параметров аплетам
Усовершенствование баннерного аплета
getDocumentBase() и getCodeBase()
AppletContext и showDocument ()
Интерфейс AudioClip
Интерфейс AppletStub
Консольный вывод
Глава 22. Обработка событий
Два механизма обработки событий
Модель делегации событий
События
Источники событий
Слушатели событий
Классы событий
Класс ActionEvent
Класс AdjustmentEvent
Класс ComponentEvent
Класс ContainerEvent
Класс FocusEvent
КлассInputEvent
Класс ItemEvent
Класс Key Event
Класс MouseEvent
Класс MouseWheelEvent
Класс TextEvent
Класс WindowEvent
Источники событий
Интерфейсы слушателей событий
Интерфейс ActionListener
Интерфейс AdjustmentListener
Интерфейс ComponentListener
Интерфейс ContainerListener
Интерфейс FocusListener
Интерфейс ItemListener
Интерфейс KeyListener
Интерфейс MouseListener
Интерфейс MouseMotionListener
Интерфейс MouseWheelListener
Интерфейс TextListener
Интерфейс WindowFocusListener
Интерфейс WindowListener
Использование модели делегации событий
Обработка событий мыши
Обработка событий клавиатуры
Классы адаптеров
Вложенные классы
Анонимные вложенные классы
Глава 23. Введение в AWT: работа с окнами, графикой и текстом
Классы AWT
Основы окон
Component
Container
Panel
Window
Frame
Canvas
Работа с рамочными окнами
Установка размеров окна
Сокрытие и отображение окна
Установка заголовка окна
Закрытие рамочного окна
Создание рамочного окна в аплете
Обработка событий в рамочном окне
Создание оконной программы
Отображение информации внутри окна
Работа с графикой,
Рисование линий
Рисование прямоугольников
Рисование эллипсов и окружностей
Рисование дуг
Рисование многоугольников
Установка размеров графики
Работа с цветом
Методы Color
Установка режима рисования
Работа со шрифтами
Определение доступных шрифтов
Создание и выбор шрифта
Получение информации о шрифте
Управление выводом текста с использованием класса FontMetrics
Отображение множества строк текста
Центрирование текста >
Выравнивание многострочного текста
Глава 24. Использование элементов управления, диспетчеров компоновки и меню AWT
Основы элементов управления
Добавление и удаление элементов управления
Реагирование на действия, производимые над элементами управления
HeadlessException
Метки
Использование кнопок
Обработка кнопок
Использование флажков
Обработка флажков
CheckboxGroup
Элементы управления выбором
Обработка списков выбора
Использование списков
Обработка списков
Управление линейками прокрутки
Обработка линеек прокрутки
Использование класса TextField
Обработка TextField
Использование TextArea
Диспетчеры компоновки
FlowLayout
BorderLayout
Использование Insets
GridLayout
CardLayout
GridBagLayout
Линейки меню и меню
Диалоговые окна
FileDialog
Обработка событий путем расширения компонентов AWT
Расширение класса Button
Расширение класса Checkbox
Расширение группы флажков
Расширение класса Choice
Расширение класса List
Расширение класса Scrollbar
Глава 25. Изображения
Форматы файлов
Основы работы с изображениями: создание, загрузка и отображение
Создание объекта Image
Загрузка изображения
Отображение изображения
Интерфейс ImageObserver
Двойная буферизация
MediaTracker
Интерфейс ImageProducer
MemoryImageSource
Интерфейс ImageConsumer
Класс PixelGrabber
Класс ImageFilter
Фильтр CropImageFilter
Фильтр RGBImageFilter
Аппликационная анимация
Дополнительные классы обработки изображений
Глава 26. Параллельные утилиты
Пакеты параллельного API
java.util.concurrent
java.util.concurrent.atomic
java.util.concurrent.locks
Использование объектов синхронизации
Semaphore
CountDownLatch
CyclicBarrier
Exchanger
Использование исполнителя
Простой пример исполнителя
Использование Callable и Future
Перечисление TimeUnit
Параллельные коллекции
Блокировки
Атомарные операции
Параллельные утилиты в сравнении с традиционным подходом в Java
Глава 27. N10, регулярные выражения и другие пакеты
Пакеты API ядра
NIO
Основы NIO
Наборы символов и селекторы
Использование системы NIO
Будущие перспективы NIO
Обработка регулярных выражений
Класс Pattern
Класс Matcher
Синтаксическая структура регулярного выражения
Пример совпадения с шаблоном
Два варианта сопоставления с шаблоном
Изучение регулярных выражений
Рефлексия
Удаленный вызов методов
Клиент-серверное приложение, использующее RMI
Форматирование текста
Класс DateFormat
Класс SimpledateFormat
Часть III. Разработка программного обеспечения с использованием Java
Глава 28. Java Beans
Что такое bean-компонент Java?
Преимущества bean-компонентов Java
Самодиагностика
Проектные шаблоны для свойств
Проектные шаблоны для событий
Методы и проектные шаблоны
Использование интерфейса Beanlnfo
Связанные и ограниченные свойства
Постоянство
Конфигураторы
Java Beans API
Introspector
PropertyDescriptor
EventSetDescriptor,
MethodDescriptor
Пример bean-компонента
Глава 29. Введение в Swing
Истоки Swing
Классы Swing построены на основе AWT
Две ключевых особенности Swing
Компоненты Swing являются облегченными
Swing поддерживает подключаемый внешний вид
MVC
Компоненты и контейнеры
Компоненты
Контейнеры
Панели контейнеров верхнего уровня
Пакеты Swing
Простое Swing-приложение
Обработка событий
Создание Swing-аплета
Рисование в Swing
Основы рисования
Вычисление области рисования
Пример рисования
Глава 30. Дополнительные сведения о Swing
JLabel и Image Icon
JTextField
Кнопки Swing
JButton
JToggleButton
Флажки
Переключатели
JTabbedPane
JScrollPane
JList
JComboBox
Деревья
JTable
Продолжайте изучать Swing
Глава 31. Сервлеты
Предварительные сведения
Жизненный цикл сервлета
Использование Tomcat для разработки сервлетов
Простой сервлет
Создание и компиляция исходного кода сервлета
Запуск Tomcat
Запуск Web-браузера и запрос сервлета
Servlet API
Пакет javax.servlet
Интерфейс Servlet
Интерфейс ServletConf ig
Интерфейс ServletContext
Интерфейс ServletRequest
Интерфейс ServletResponce
Класс GenericServlet
Класс ServletlnputStream
Класс ServletOutputStream
Классы ServletException
Чтение параметров сервлета
Пакет javax. servlet. http
Интерфейс HttpServletRequest
Интерфейс HttpServletResponse
Интерфейс HttpSession
Интерфейс HttpSessionBindingListener
Класс Cookie
Класс HttpServlet
Класс HttpSessionEvent
Класс HttpSessionBindingEvent
Обработка HTTP-запросов и откликов
Обработка HTTP-запросов GET
Обработка HTTP-запросов POST
Использование cookie-наборов
Отслеживание сеансов
Часть IV. Применения Java
Глава 32. Финансовые аплеты и сервлеты
Расчет платежей по ссуде
Поля RegPay
Метод init()
Метод makeGUI()
Метод actionPerformed()
Метод compute()
Расчет будущей стоимости вклада
Расчет первоначальной суммы вклада, необходимой для достижения будущей стоимости
Расчет первоначальной суммы вклада, необходимой для получения желаемого годового дохода
Нахождение максимального годового дохода для данной суммы вклада
Нахождение остатка баланса по ссуде
Создание финансовых сервлетов
Преобразование аплета RegPay в сервлет
Сервлет RegPay
Самостоятельная работа
Глава 33. Создание утилиты загрузки на Java
Загрузка данных из Internet
Обзор утилиты Download Manager
Класс Download
Переменные класса Download
Конструктор класса Download
Метод download()
Метод run()
Метод stateChanged()
Методы действия и средства доступа
Класс ProgressRenderer
Класс DownloadsTableModel
Метод addDownload()
Метод clearDownload()
Метод getColumnClass()
Метод getValueAt()
Метод update()
Класс DownloadManager
Переменные класса DownloadManager
Конструктор DownloadManager
Метод verifyUrlO
Метод tableSelectionChanged()
Метод updateButtons()
Обработка событий действий
Компиляция и запуск утилиты Download Manager
Расширение утилиты Download Manager
Приложение А. Использование комментариев документации
Дескрипторы утилиты javadoc
$author
{@code}
@deprecated
{@docRoot}
@exception
{@inheritDoc}
{@link}
{@linkplain}
{@literal}
@param
@return
@see
@serial
@serialData
@serialField
@since
@throws
{@value}
@version
Общая форма комментариев документации
Вывод утилиты javadoc
Пример использования комментариев документации
Предметный указатель
radiosit.ru
Полный справочник по Java SE 6 Edition
- Автор: Г. Шилдт
- год издания: 2007
- язык: русский
- учебник объемом: 1034стр.
- формат: djvu
размер файла: 27.8Mb
Учебник по Java представляет интерес для программистов любого уровня. Новички смогут изучить язык Java, начиная с самых основ, причем, этому будет способствовать сама подача материала: подробное описание большого количества полезных примеров. А опытные программисты найдут в учебнике тщательное рассмотрение библиотек Java, материал по разбору и применению сложнейших функций языка.
7-е издание учебника по Java полностью переработано под новую версию языка — Java SE 6. В него добавился ряд существенных новых тем: более подробно рассмотрены пакеты ресурсов, данные по Swing и др. Учебник является подробнейшим руководством по языку, его всегда можно использовать в качестве «полного справочника по Java». Читатель найдет в нем фундаментальные принципы программирования, познакомится с большей частью библиотеки Java API.
Первой часть представляет собой подробнейший учебник по языку Java. Начиная с базовых понятий, читатель, постепенно, познакомится с механизмами обработки, многопоточной обработки, интерфейсами, пакетами и т.д. В следующей части рассматривается стандартная библиотека Java, Collection Framework, аплеты, GUI — графический интерфейс пользователя, работа с изображениями. Далее предстоит знакомство с технологиями Swing, Java Beans и сервлетами.
Последняя часть учебника по Java полностью посвящена практическому применению языка на основе реальных примеров. Это разработка аплетов, выполняющих вычислительные функции финансово-экономического характера. Другой пример состоит в разработке утилиты, которая будет управлять загрузкой файлов: запуском, приостановкой-возобновлением передачи данных. И не забывайте, что язык Java, на сегодняшний день, — лучший инструмент для разработки веб-приложений. Герберт Шилдт — общепризнанный авторитет по программированию на языках Java, C, C#, автор учебника «C++: базовый курс».
скачать учебник Java: Turbobit
Новое издание книги: Java: Полное руководство, 8-е издание.
Основы программирования на платформе 1С
Эти видеоуроки могут осваивать люди, мало знакомые с программированием, они для новичков. Их цель — научить основам программирования на платформе 1С.
подробнее…
Язык запросов 1С-программирования
Ускоренное изучение языка запросов 1С на платформе 8.3. Уроки научат извлекать данные из базы в удобном виде, они продуктивны и имеют четкую конкретику.
подробнее…
Основы Java для начинающих
Видео по Java и объектно-ориентированному программированию. Представлена осязаемая конструкция языка Java и правильная модель программирования.
подробнее…
Базы данных в Java
Любому программисту необходимо уметь работать с базами данных. Вы узнаете, как используются БД и запросы SQL в Java. Уроки подходят новичкам.
подробнее…
Создание и монетизация приложений Android
Видео по созданию мобильных приложений для Android для абсолютных новичков. Планирование архитектуры будущего приложения с учетом требований рынка.
подробнее…
Программирование на Java для детей, родителей .. (PDF)
Учебник по программированию на Java предназначен для новичков, что явствует из его красноречивого названия, он отлично иллюстрирован.
подробнее…
Язык C в 21 веке (PDF)
Книга по программированию на языке C, в которой читатель найдет все новшества, необходимые для разработки эффективных и передовых приложений.
подробнее…
Путь программиста (PDF)
Это справочник по эффективному построению карьеры программиста. Он научит дорого продавать свои услуги на рынке информационных технологий.
подробнее…
samouchitelbox.ru
Книги по Java | ProgBook — книги и учебники по программированию
Книга Майкла Ленди, Салима Сиддикви и Джеффа Свишера «Borland JBuilder. Руководство разработчика» написана с целью внести свою лепту в помощь программистам, которые создают приложения на языке Java. Уровень книги рассчитан на специалистов, которые имеют опыт создания Java-программ. В книге описаны основные принципы написания на языке Java различных типов программ. Задачи по написанию клиентских программ и программ, которые выполняются на стороне сервера, рассмотрены очень подробно. По задачам разработки распределенных корпоративных приложений в книге можно обнаружить достаточно большой объем информации. JBuilder использован в качестве платформы для написания программ всех типов.
Книга является кратким справочником, который нужен каждому Java-программисту. Она включает в себя короткий вводный курс в язык программирования Java и описание ключевых API, благодаря этому опытные программисты имеют возможность сразу переходить к написанию Java-кода. Четвертое издание «Java. Справочник» полностью отдано описанию Java 1.4. В нем имеется довольно краткое изложение синтаксиса Java, описаны возможности Java в решении объектно-ориентированных задач, а также даны описания основных API Java, в которых подробно изложены способы работы над такими стандартными задачами, как ввод/вывод, работа со строками, обработка XML, поддержка потоков, которые в общем то и составляют платформу Java 2. В книге имеется также достаточно достоверный справочник O\’Reilly практически по всем классам базовых Java-пакетов, такие как java.io, java.lang, java.math, java.beans, java.text, java.net и java.util. Кроме того, этот справочник описывает и большое количество новых классов Java 1.4, в том числе NIO (новый интерфейс ввода/вывода), протоколирование и средства работы с XML. В процессе работы над Java приложениями, огромную помощь Вам окажет книга «Java в примерах. Справочник» (Символ-Плюс, 2003). Эта книга прекрасно дополняет данное издание.
Книга «Философия Java» Брюса Эккеля рассматривает не только основные проблемы, встречающиеся в решении задач по программированию в Java, но и причины их возникновения, а также наиболее часто применяемые подходы для их разрешения. В связи с этим автор в каждой главе описывает основные черты данного языка и приводит примеры их использования в выполнении определенных целей. Данная книга выдержала уже не одно переиздание, но до сих пор является одним из самых популярных изданий из-за свое философское изложение всех тонкостей языка программирования Java, в связи с чем на сегодняшний день она является лучшим учебным пособием для людей, занимающихся программированием в данной среде. В книге Брюс Эккель постарался интегрировать все усовершенствования Java SE 5/6, и использовал их в каждом материале.
Книга «Гибкая разработка приложений на Java с помощью Spring, Eclipse и Hibernate», написанная Анилом Хемраджанном, уделяет особое внимание разработке приложений на Java, но в меньшей степени затрагивает инфраструктуру. Иначе говоря, автор описывает технологии разработки приложений, такие как Eclipse, Hibernate, Spring, например, а не самим программным продуктам, таким как базы данных или серверы приложений. Весь материал, изложенный в книге, опробован в реальных приложениях, успешно работающих, и применяющихся по сей день. Некоторые из них используются в кластеризуемой среде сервера приложений. Автор поставил перед собой цель изложить весь материал лаконично, конкретно затрагивая лишь необходимые темы, в связи с чем Анил Хемраджан полностью сосредоточил внимание читателя на разработке хорошо масштабируемых приложений. Кроме технологий Spring, Hibernate и Eclipse описываются и альтернативные методы и технологии.
Книга «Java 2. Библиотека профессионала. Том 2. Тонкости программирования» за авторством Кея С.Хорстманна и Гари Корнелла предназначена в первую очередь разработчикам, которые хотят использовать технологии Java для создания собственных проектов. В издании описываются поддержка потоков и работа с базами данных, сетевое взаимодействие, компоненты Java Beans, использование наборов данных. Авторы уделили внимание таким вопросам, как организация защиты и создание платформенно-ориентированных методов, генерация и разбор XML документов, а также поддержка распределенных объектов. Книга написана с учетом новых возможностей, которые предоставляет специалистам JDK 5.0. Данное учебное пособие благодаря своему особому стилю изложения будет полезна как опытным, так и начинающим разработчикам.
Книга Кея Хорстманна и Гари Корнелла «Java 2. Библиотека профессионала. Том 1.Основы» предназначена, в первую очередь, для изучения программистами — профессионалами и является полным справочником и методическим пособием по основам разработки и программирования на языке Java. Будет ошибкой считать, что в данном учебнике рассматривается только синтаксис языка. Целью книги является обучение методам объектно-ориентированного программирования и преодоление основных проблем, встречающихся в данной области. Примечательно, что книга не требует наличия опыта программирования на языке С++ и применения методов объектно-ориентированного программирования. Любой специалист, уже работавший с такими языками, как Cobol, Visual Basic, Pascal и С не испытает трудностей в изучении материалов данной книги. Авторы уделили достаточно большое внимание возможностям технологий JDK 5.0 — новые языковые и библиотечные средства отображены в многочисленных примерах, которые приводятся в книге.
Автор пособия «Полный справочник по Java» Герберт Шилдт является талантливым разработчиком и гуру в области программирования. Данную книгу он посвятил изучению одного из наиболее популярных языков — Java. Издание построено в виде справочного и учебного пособия, являющимся отличным источником информации по современной версии платформы Java — Java SE 6, что позволяет с самого изучить с нуля все азы разработки приложений и апплетов производственного качества. Кроме как синтаксиса языка и фундаментальных принципов программирования, автор рассматривает и такие вопросы, как библиотеки Java API, создание сервлетов и апплетов, уделяет внимание AWT, Java Beans и Swing. Описываются в книге и ввод/вывод, работа в сети, обработка строк и регулярные выражения. Приведено огромное количество примеров, которые заметно упростят изучение предложенного материала. Предназначена книга в основном для программистов и разработчиков самой различной квалификации, но будет полезна преподавателям и студентам.
Автор книги «Язык программирования Java: Создание интерактивных приложений для Internet» Петр Карабин преподносит свой труд как отличное учебное пособие по языку программирования Java. Появление такого языка, как Java, можно назвать одним из самых значительных событий в области разработки сред программирования за последние 25 лет, тем более что язык HTML, расшифровывающийся как Hypertext Markup Language (Язык разметки гипертекста) является основным для статического размещения страниц в Интернете. В свое время, язык программирования Java послужил качественным скачком именно в создании и разработке интерактивных продуктов для сетей Интернет.
Книга «Секреты программирования для Internet на Java», авторами которой являются М.Томас, П.Пател, А.Хадсон и Д.Болл, познакомит читателей с одним из самых эффективных методов создания приложений для сети Интернет — программированием апплетов на языке программирования Java. Хотя апплет, по сути, является маленьким приложением, в умелых руках он способен на многое. Посредством апплетов можно создать динамичные Web-страницы, приложения для интрасетей. По ходу чтения читатель познакомится не только с основой языка программирования, но и овладеет стилем объектно-ориентированного программирования, а также научится самостоятельно разрабатывать сетевые протоколы. В заключительных разделах издания читателю предлагается рассмотреть несколько проектов, которые демонстрируют поэтапно разработку серьезного Java приложения — от постановки целей до получения готового продукта.
Издание «Язык программирования Java» за авторством Кена Арнольда и Джеймса Гослинга является основным пособием и описанием возможностей языка программирования Java, выпускаемым по специальной лицензии издательства Addison — Wesley. Стилем написания книга напоминает «Библию» программистов языка С — «Язык программирования С» Д.Ричи и Б.Кернигана. Выбранный авторами метод написания оправдан тем, что Джеймс Гослинг является одним из разработчиков языка программирования Java. Книга предназначена как для изучения языка программирования, так и практики по нему, но кроме того, она послужит отличным справочным пособием для тех людей, которые только начали изучать все возможности Java.
progbook.ru
Справочник по Java Collections Framework
Данная публикация не является полным разбором или анализом (не покрывает пакет java.util.concurrent). Это, скорее, справочник, который поможет начинающим разработчикам понять ключевые отличия одних коллекций от других, а более опытным разработчикам просто освежить материал в памяти.
Что такое Java Collections Framework?
Java Collection Framework — иерархия интерфейсов и их реализаций, которая является частью JDK и позволяет разработчику пользоваться большим количесвом структур данных из «коробки».
Базовые понятия
На вершине иерархии в Java Collection Framework располагаются 2 интерфейса: Collection и Map. Эти интерфейсы разделяют все коллекции, входящие во фреймворк на две части по типу хранения данных: простые наборы элементов и пары «ключ — значение» (словари).
Collection — этот интерфейс находится в составе JDK c версии 1.2 и определяет основные методы работы с простыми наборами элементов, которые будут общими для всех его реализаций (например size(), isEmpty(), add(E e) и др.). Интерфейс был слегка доработан с приходом дженериков в Java 1.5. Так же в версии Java 8 было добавлено несколько новых метода для работы с лямбдами (такие как stream(), parallelStream(), removeIf(Predicate<? super E> filter) и др.).
Важно также отметить, что эти медоды были реализованы непосредственно в интерфейсе как default-медоды.
Map. Данный интерфейс также находится в составе JDK c версии 1.2 и предоставляет разработчику базовые методы для работы с данными вида «ключ — значение».Также как и Collection, он был дополнен дженериками в версии Java 1.5 и в версии Java 8 появились дополнительные методы для работы с лямбдами, а также методы, которые зачастую реализовались в логике приложения (getOrDefault(Object key, V defaultValue), putIfAbsent(K key, V value)).
Интерфейс Map [doc]

Hashtable — реализация такой структуры данных, как хэш-таблица. Она не позволяет использовать null в качестве значения или ключа. Эта коллекция была реализована раньше, чем Java Collection Framework, но в последствии была включена в его состав. Как и другие коллекции из Java 1.0, Hashtable является является синхронизированной (почти все методы помечены как synchronized). Из-за этой особенности у неё имеются существенные проблемы с производительностью и, начиная с Java 1.2, в большинстве случаев рекомендуется использовать другие реализации интерфейса Map ввиду отсутствия у них синхронизации.
HashMap — коллекция является альтернативой Hashtable. Двумя основными отличиями от Hashtable являются то, что HashMap не синхронизирована и HashMap позволяет использовать null как в качестве ключа, так и значения. Так же как и Hashtable, данная коллекция не является упорядоченной: порядок хранения элементов зависит от хэш-функции. Добавление элемента выполняется за константное время O(1), но время удаления, получения зависит от распределения хэш-функции. В идеале является константным, но может быть и линейным O(n). Более подробную информацию о HashMap можно почитать здесь.
LinkedHashMap — это упорядоченная реализация хэш-таблицы. Здесь, в отличии от HashMap, порядок итерирования равен порядку добавления элементов. Данная особенность достигается благодаря двунаправленным связям между элементами (аналогично LinkedList). Но это преимущество имеет также и недостаток — увеличение памяти, которое занимет коллекция. Более подробная информация изложена в этой статье.
TreeMap — реализация Map основанная на красно-чёрных деревьях. Как и LinkedHashMap является упорядоченной. По-умолчанию, коллекция сортируется по ключам с использованием принципа «natural ordering», но это поведение может быть настроено под конкретную задачу при помощи объекта Comparator, которые указывается в качестве параметра при создании объекта TreeMap.
WeakHashMap — реализация хэш-таблицы, которая организована с использованием weak references. Другими словами, Garbage Collector автоматически удалит элемент из коллекции при следующей сборке мусора, если на ключ этого элеметна нет жёстких ссылок.
Интерфейс List [doc]

Реализации этого интерфейса представляют собой упорядоченные коллекции. Кроме того, разработчику предоставляется возможность доступа к элементам коллекции по индексу и по значению (так как реализации позволяют хранить дубликаты, результатом поиска по значению будет первое найденное вхождение).
Vector — реализация динамического массива объектов. Позволяет хранить любые данные, включая null в качестве элемента. Vector появился в JDK версии Java 1.0, но как и Hashtable, эту коллекцию не рекомендуется использовать, если не требуется достижения потокобезопасности. Потому как в Vector, в отличии от других реализаций List, все операции с данными являются синхронизированными. В качестве альтернативы часто применяется аналог — ArrayList.
Stack — данная коллекция является расширением коллекции Vector. Была добавлена в Java 1.0 как реализация стека LIFO (last-in-first-out). Является частично синхронизированной коллекцией (кроме метода добавления push()). После добавления в Java 1.6 интерфейса Deque, рекомендуется использовать именно реализации этого интерфейса, например ArrayDeque.
ArrayList — как и Vector является реализацией динамического массива объектов. Позволяет хранить любые данные, включая null в качестве элемента. Как можно догадаться из названия, его реализация основана на обычном массиве. Данную реализацию следует применять, если в процессе работы с коллекцией предплагается частое обращение к элементам по индексу. Из-за особенностей реализации поиндексное обращение к элементам выполняется за константное время O(1). Но данную коллекцию рекомендуется избегать, если требуется честое удаление/добавление элементов в середину коллекции. Подробный анализ и описание можно почитать в этом хабратопике.
LinkedList — ещё одина реализация List. Позволяет хранить любые данные, включая null. Особенностью реализации данной коллекции является то, что в её основе лежит двунаправленный связный список (каждый элемент имеет ссылку на предыдущий и следующий). Благодаря этому, добавление и удаление из середины, доступ по индексу, значению происходит за линейное время O(n), а из начала и конца за константное O(1). Так же, ввиду реализации, данную коллекцию можно использовать как стек или очередь. Для этого в ней реализованы соответсвующие методы. На Хабре также есть статья с подробным анализом и описанием этой коллекции.
Интерфейс Set [doc]
Представляет собой неупорядоченную коллекцию, которая не может содержать дублирующиеся данные. Является программной моделью математического понятия «множество».
HashSet — реализация интерфейса Set, базирующаяся на HashTable. Внутри использует объект HashMap для хранения данных. В качестве ключа используется добавляемый элемент, а в качестве значения — объект-пустышка (new Object()). Из-за особенностей реализации порядок элементов не гарантируется при добавлении.
LinkedHashSet — отличается от HashSet только тем, что в основе лежит LinkedHashSet вместо HashSet. Благодаря этому отличию порядок элементов при обходе коллекции является идентичным порядку добавления элементов.
TreeSet — аналогично другим классам-реализациям интерфейса Set содержит в себе объект NavigableMap, что и обуславливает его поведение. Предоставляет возможность управлять порядком элементов в коллекции при помощи объекта Comparator, либо сохраняет элементы с использованием «natural ordering».
Интерфейс Queue [doc]

Этот интерфейс описывает коллекции с предопределённым способом вставки и извлечения элементов, а именно — очереди FIFO (first-in-first-out). Помимо метотов, определённых в интерфейса Collection, определяет дополнительные методы для извлечения и добавления элементов в очередь. Большинство реализаций данного интерфейса находится в пакете java.util.concurrent и подробно рассматриваются в данном обзоре.
PriorityQueue — является единственной прямой реализацией интерфейса Queue (была добавлена, как и интерфейс Queue, в Java 1.5), не считая класса LinkedList, который так же реализует этот интерфейс, но был реализован намного раньше. Особенностью данной очереди является возможность управления порядком элементов. По-умолчанию, элементы сортируются с использованием «natural ordering», но это поведение может быть переопределено при помощи объекта Comparator, который задаётся при создании очереди. Данная коллекция не поддерживает null в качестве элементов.
ArrayDeque — реализация интерфейса Deque, который расширяет интерфейс Queue методами, позволяющими реализовать конструкцию вида LIFO (last-in-first-out). Интерфейс Deque и реализация ArrayDeque были добавлены в Java 1.6. Эта коллекция представляет собой реализацию с использованием массивов, подобно ArrayList, но не позволяет обращаться к элементам по индексу и хранение null. Как заявлено в документации, коллекция работает быстрее чем Stack, если используется как LIFO коллекция, а также быстрее чем LinkedList, если используется как FIFO.
Заключение
Java Collections Framework содержит большое количество различных структур данных, доступных в JDK «из коробки», которые в большинстве случаев покрывают все потребности при реализации логики приложения. При необходимости, разработчик может создать собственную реализацию, расширив или переопределив существующую логику, либо создав свою собственную реализацию подходящего интерфейса с нуля. Также существует некоторое количество готовых решений, которые являются альтернативой или дополнением к Java Collections Framework. Наиболее популярными являются Google Guava и Commons Collections.
Автор: ASuprun
Источник
www.pvsm.ru