Советы и лайфхаки

Справочник по java – Лучший самоучитель по Java для начинающих и продвинутых

Содержание

Полный справочник по Java. Java SE 6 Edition (2007) » База РуНет - Зеркало xtreme.rip Информационно

Advanced SystemCare Ultimate 12.0.1.92
Advanced 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 - представляет собой новое приложение, которое позволяет управлять сотовым телефоном с персонального компьютера. Мобильный должен быть подключен через ИК-порт, Блютуз ...

basaru.net.ru

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. Программирование игр для мобильных телефонов». К сожалению сказать ничего не могу, но рейтинг оригинала на Amazon = 4,5 звезды(максимум 5). Надеюсь, что это так, потому что все другие книги по этой технологии за прошедшие года(а их набралось всего 4) не нашли ни одного положительного комментария на books.ru & Ozon.
Итог

Довольно широкий выбор книжек по 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(), 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 можно почитать здесь (актуально для 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

Отправить ответ

avatar
  Подписаться  
Уведомление о