Это коллекция api интерфейсов предназначенных для разработки программ на java
Третьи стороны могут свободно реализовать любые спецификации JSR для официального API (даже для основного API языка), при условии, что они соответствуют Technology Compatibility Kit (TCK) для данного JSR (TCK представляет собой набор тестов для проверки соответствия реализаций для JSR). Результатом этой свободы является то, что у многих официальных API больше реализаций чем эталонных реализаций от Sun
Ниже приводится частичный список API для Java.
Содержание
Официальные API
Java Platform, Standard Edition (Java SE)
API, поставляющиеся в комплекте (часть стандартной загрузки) [1]
Дополнительные API (загружаются отдельно)
Java Platform, Enterprise Edition (Java EE)
API, поставляемые в комплекте (часть стандартной загрузки)
Опциональные APIs (загружаются отдельно)
Название | Акроним | Available from |
---|---|---|
Java API for XML-Based RPC | JAX-RPC | available here |
Java Platform, Micro Edition (Java ME)
Название | Акроним | Available from |
---|---|---|
Connected Limited Device Configuration | CLDC | Эталонная реализация — available here |
Java Telephony API | available here |
Неофициальные API (Released by third parties)
Этот список не является полным, так как число API для платформы Java огромно.
-
SDK, Java реализация SDK, используемого популярным архивирующим ПО 7-Zip (available here)
- Lady4j. Programming assistant and application server issue solver. (available here)
- Cobra HTML parser and renderer library.
- JScience
- Javolution
- Flying Saucer XML, XHTML, and CSS 2.1 rendering library.
- Cobra HTML parser and renderer library.
-
(SWT)
Примечания
- ↑JDK 6 Documentation
- ↑JDK 6 Java Accessibility-related APIs & Developer Guides — from Sun Microsystems
- ↑Drag and Drop Packages
- ↑JDK 6 Image I/O-related APIs & Developer Guides — from Sun Microsystems
- ↑JDK 6 Java Sound-related APIs & Developer Guides — from Sun Microsystems
- ↑JDK 6 Java Database Connectivity (JDBC)-related APIs & Developer Guides — from Sun Microsystems
- ↑Java SE Security
- ↑Java SE Security
См. также
- Проверить качество перевода с иностранного языка.
- Перевести текст с иностранного языка на русский.
- Java
- API
- Списки:Программирование
Wikimedia Foundation . 2010 .
Полезное
Смотреть что такое "Список Java API" в других словарях:
Java — Иное название этого понятия «Ява»; см. также другие значения. Не следует путать с JavaScript. Java Класс языка … Википедия
Java (значения) — … Википедия
Package (Java) — Java package (пакет Java) механизм, позволяющий организовать Java классы в пространства имен аналогично модулям в языке программирования Модула. Java пакеты могут содержаться в сжатом виде в JAR файлах. Обычно в пакеты объединяют классы… … Википедия
Java Persistence Query Language — Испытал влияние: SQL Java Persistence Query Language (JPQL) платформо независимый объектно ориентированный язык запросов являющийся частью Java Persistence API спецификации. JPQL используется для написания запросов к сущностям, хранящимся в … Википедия
Список игровых движков — Инструментарий, называемый игровыми движками, создан для упрощения и ускорения разработки игр, чтобы не писать всё «с нуля». В данном контексте будет фигурировать несколько понятий движков, но чаще всего это игровые и графические. Важно понимать… … Википедия
Список продуктов Mozilla — Ниже список продуктов Mozilla Foundation/Mozilla Corporation. Все продукты, кроме специальных, кросс платформенны. Содержание 1 Клиентские приложения 2 Компоненты … Википедия
Список операционных систем — Это список известных операционных систем. Операционные системы могут быть классифицированы по базовой технологии (UNIX подобные, пост UNIX/потомки UΝΙΧ), типу лицензии (проприетарная или открытая), развивается ли в настоящее время (устаревшие или … Википедия
Список RFC — Здесь представлен список RFC (документ запроса комментариев). Поскольку на данный момент их существует более 5000, то в данном списке представлены лишь наиболее значимые из них, по которым существуют связанные с ними статьи. Содержание 1 RFC по… … Википедия
Список (элемент интерфейса программ) — Внешний вид List box Список (англ. List box) элемент (виджет) графического интерфейса пользователя, который отображает прокручиваемый список с элементами. Позволяет пользователю выбрать один или несколько элементов из списка, как… … Википедия
Список версий Ubuntu — Основная статья: Ubuntu Ubuntu свободная операционная система для персональных компьютеров, рабочих станций, нетбуков и серверов, является одним из самых популярных дистрибутивов Linux. Новая версия системы выходит раз в полгода … Википедия
Программирование и разработка
Интерфейс разработки приложений (API) — это вычислительный интерфейс, который определяет взаимодействие между программным обеспечением. API-интерфейсы позволяют разработчикам не углубляться в исходный код некоторых сторонних программ. Они упрощают программирование, абстрагируя базовую реализацию и открывая только те объекты или действия, которые необходимы разработчику. Таким образом, разработчикам не нужно разбираться в операциях файловой системы, происходящих за кулисами.
При разработке на Java большинство основных задач программирования выполняются классами и пакетами API, что помогает минимизировать количество строк, написанных в одном фрагменте кода.
Java Development Kit (JDK) состоит из трех основных компонентов, а именно:
- Компилятор Java;
- Виртуальная машина Java (JVM);
- Интерфейс программирования приложений Java (API).
Java API описывает функции каждого из своих компонентов. Многие из этих компонентов заранее написаны и широко используются, поэтому разработчики могут применять заранее написанный код через Java API. После обращения к доступным классам и пакетам API разработчики могут вызывать необходимые классы кода и пакеты для реализации.
Типы API
Существует множество видов API. Существует около 15 000 общедоступных API-интерфейсов и многие тысячи частных API-интерфейсов, которые компании используют для расширения своих внутренних и внешних возможностей.
Зачем нам нужен API в Java?
Автоматизация: с помощью Java API работа может контролироваться компьютерными системами, участие программистов не требуется. С помощью API компании-разработчики программного обеспечения могут обновлять рабочие процессы, чтобы сделать их более быстрыми и эффективными.
Применение: поскольку API-интерфейсы Java могут легко получить доступ к программным компонентам, существует гораздо большая гибкость в доставке данных и услуг.
Эффективность: после предоставления доступа к Java API созданный контент может быть немедленно выпущен и доступен для каждого канала. Это позволяет быстро распространять контент.
Интеграция: API Java упрощают встраивание контента. Это обеспечивает дополнительную динамическую доставку данных.
Действия, которые вы можете выполнять через API
API может выполнять четыре типа действий:
- GET запрашивает данные с сервера;
- POST отправляет изменения от клиента к серверу;
- PUT изменяет или дополняет существующие данные;
- УДАЛИТЬ: удаляет существующие данные.
Когда вы объединяете конечные точки с этими действиями, вы можете искать или обновлять любые доступные данные через API. Все эти действия различны, и вам нужно будет проверить документацию по API, чтобы узнать, как их кодировать.
Вот способы, которыми вы можете сделать запрос на сервере:
Для большинства API требуется ключ API. Как только вы найдете API, который хотите использовать, вам нужно будет проверить требования к доступу в документации. Тогда вам, скорее всего, придется пройти проверку личности. После этого вы получите уникальную строку букв и цифр для использования при доступе к API.
Еще один хороший способ получить данные из API — создать URL-адрес из существующей документации API. Запрос API обычно не сильно отличается от обычного URL-адреса браузера, но возвращаемые данные будут в форме, удобной для чтения компьютерами.
Заключение
API очень полезен для извлечения данных из другого приложения или программного обеспечения. Если вы знаете, как читать документацию и писать запросы, вы можете получить большой объем данных. Но анализ всех этих данных может оказаться непосильным. Вот где в игру вступают разработчики. Они могут создавать программы, отображающие данные непосредственно в браузере или приложении в удобном для понимания формате.
Пример руководства по функциональным интерфейсам Java 8. @Функциональный интерфейс на java. Пример учебника по функциональному интерфейсу Java с примерами лямбда-выражений.
Функциональные интерфейсы Java 8
Если мы рассмотрим некоторые другие языки программирования, такие как C++, JavaScript; они называются функциональным языком программирования , потому что мы можем писать функции и использовать их при необходимости. Некоторые из этих языков поддерживают объектно-ориентированное программирование, а также функциональное программирование.
Быть объектно-ориентированным неплохо, но это привносит в программу много многословия. Например, предположим, что нам нужно создать экземпляр Runnable. Обычно мы делаем это с помощью анонимных классов, как показано ниже.
Если вы посмотрите на приведенный выше код, фактическая часть, которая может быть использована, – это код внутри метода run (). Остальная часть кода связана с тем, как структурированы java-программы.
Функциональные интерфейсы Java 8 и лямбда-выражения помогают нам писать меньший и более чистый код, удаляя много кода котельной.
Функциональный интерфейс Java 8
Интерфейс с ровно одним абстрактным методом называется функциональным интерфейсом. @Functional interface добавлена аннотация, чтобы мы могли пометить интерфейс как функциональный интерфейс.
Его не обязательно использовать, но лучше всего использовать его с функциональными интерфейсами, чтобы случайно не добавлять дополнительные методы. Если интерфейс аннотирован аннотацией @Functional Interface и мы пытаемся использовать более одного абстрактного метода, это приводит к ошибке компилятора.
Основное преимущество функциональных интерфейсов java 8 заключается в том, что мы можем использовать лямбда-выражения для их создания и избегать использования громоздкой реализации анонимного класса.
API коллекций Java 8 был переписан и представлен новый потоковый API, который использует множество функциональных интерфейсов. Java 8 определила множество функциональных интерфейсов в java.util.function пакете. Некоторые из полезных функциональных интерфейсов java 8 являются Потребителем , Поставщиком , Функцией и Предикатом .
Вы можете найти более подробную информацию о них в примере потока Java 8 .
ява.ланг.Запускаемый является отличным примером функционального интерфейса с одним абстрактным методом run() .
Ниже приведен фрагмент кода, содержащий некоторые рекомендации по функциональным интерфейсам:
Лямбда-выражение
Лямбда – выражения-это способ, с помощью которого мы можем визуализировать функциональное программирование в объектно-ориентированном мире java. Объекты являются основой языка программирования java, и у нас никогда не может быть функции без объекта, поэтому язык Java поддерживает использование лямбда-выражений только с функциональными интерфейсами.
Поскольку в функциональных интерфейсах есть только одна абстрактная функция, нет никакой путаницы в применении лямбда-выражения к методу. Синтаксис лямбда-выражений: (аргумент) – > (тело) . Теперь давайте посмотрим, как мы можем написать выше анонимное выполняемое с использованием лямбда-выражения.
Давайте попробуем понять, что происходит в приведенном выше лямбда-выражении.
- Запускаемый-это функциональный интерфейс, поэтому мы можем использовать лямбда-выражение для создания его экземпляра.
- Поскольку метод run() не принимает аргументов, наше лямбда-выражение также не имеет аргументов.
- Как и в блоках if-else, мы можем избегать фигурных скобок (<>), поскольку в теле метода есть один оператор. Для нескольких операторов нам пришлось бы использовать фигурные скобки, как и любые другие методы.
Зачем нам нужно Лямбда-выражение
- Сокращенные строки кода Одним из явных преимуществ использования лямбда-выражения является то, что объем кода уменьшается, мы уже видели, как легко мы можем создать экземпляр функционального интерфейса, используя лямбда-выражение, а не используя анонимный класс.
- Поддержка последовательного и параллельного выполнения
Еще одним преимуществом использования лямбда-выражения является то, что мы можем воспользоваться поддержкой последовательных и параллельных операций Stream API.
Чтобы объяснить это, давайте возьмем простой пример, где нам нужно написать метод для проверки того, является ли переданное число простым числом или нет.
Традиционно мы бы написали его код, как показано ниже. Код не полностью оптимизирован, но хорош для примера, так что потерпите меня в этом.
Проблема с приведенным выше кодом заключается в том, что он носит последовательный характер, если число очень велико, то это займет значительное количество времени. Еще одна проблема с кодом заключается в том, что существует так много точек выхода, и он не читается. Давайте посмотрим, как мы можем написать тот же метод, используя лямбда-выражения и потоковый API.
IntStream -это последовательность примитивных элементов со значением int, поддерживающих последовательные и параллельные агрегатные операции. Это примитивная специализация int Stream .
Для большей удобочитаемости мы также можем написать метод, как показано ниже.
Если вы не знакомы с IntStream, метод range() возвращает последовательный упорядоченный IntStream от начального включительно (включительно) до конечного (исключающего) с шагом 1.
метод none Match() возвращает, соответствуют ли элементы этого потока указанному предикату. Он может не оценивать предикат по всем элементам, если это не необходимо для определения результата.
Давайте посмотрим, как мы можем использовать лямбда-выражения для передачи поведения метода на простом примере. Допустим, нам нужно написать метод для суммирования чисел в списке, если они соответствуют заданным критериям. Мы можем использовать предикат и написать метод, как показано ниже.
Еще одним преимуществом использования лямбда-выражения является ленивая оценка, например, предположим, что нам нужно написать метод, чтобы узнать максимальное нечетное число в диапазоне от 3 до 11 и вернуть его квадрат.
Обычно мы пишем код для этого метода следующим образом:
Вышеуказанная программа всегда будет выполняться в последовательном порядке, но мы можем использовать Stream API для достижения этой цели и получить выгоду от поиска лени. Давайте посмотрим, как мы можем переписать этот код функциональным способом программирования, используя потоковый API и лямбда-выражения.
Если вас удивляет оператор с двойным двоеточием (::), он введен в Java 8 и используется для ссылок на методы . Компилятор Java заботится о сопоставлении аргументов вызываемому методу. Это короткая форма лямбда-выражений i - > больше 3(i) или i -> Число Test.is Больше 3(i) .
Примеры Лямбда-выражений
Ниже я привожу некоторые фрагменты кода для лямбда-выражений с небольшими комментариями, объясняющими их.
Ссылки на методы и конструкторы
Ссылка на метод используется для ссылки на метод без его вызова; ссылка на конструктор аналогично используется для ссылки на конструктор без создания нового экземпляра именованного класса или типа массива.
Примеры ссылок на методы и конструкторы:
Это все для функциональных интерфейсов Java 8 и учебника по Лямбда – выражениям. Я бы настоятельно рекомендовал изучить его использование, потому что этот синтаксис является новым для Java, и для его понимания потребуется некоторое время.
Вам также следует ознакомиться с функциями Java 8, чтобы узнать обо всех улучшениях и изменениях в выпуске Java 8.
В этом уроке мы создадим демонстрационное приложение Spring Boot REST API с функциями CRUD. Мы рассмотрим настройку базы данных, модель домена, уровень сохраняемости, а также бизнес-уровень.
Вступление
REST расшифровывается как Передача репрезентативного состояния , стандартизированный подход к созданию веб-сервисов.
RESTful-наиболее распространенный подход к созданию веб-сервисов из-за того, насколько легко его изучать и создавать.
Допустим, вы заказываете что-то в ресторане быстрого питания, и кассир запрашивает у вас информацию, необходимую для обработки вашего заказа. После того, как он будет обработан, они передадут вам заказ, который вы просили. Эта транзакция является реальным примером того, как работает REST API.
В этом уроке мы рассмотрим как создать REST API на Java с помощью Spring Boot . Он будет принимать ОТПРАВЛЯТЬ и ПОЛУЧАТЬ запрашивать полезную нагрузку для просмотра и добавления записей от сущности – Пользователя .
Требования
- Среда разработки или текстовый редактор + 3+ или Gradle 4+ (в этой статье мы будем полагаться на Maven)
Инициализация проекта весенней загрузки
Использование Spring Initializr
Один из простых способов инициализации нового проекта Spring Boot-это использование Spring Initializr , который автоматически создает для вас проект загрузки с каркасной пружиной:
Мы также добавим здесь несколько зависимостей, так как мы захотим использовать их в нашем проекте:
- Spring Web – Для включения Spring MVC и встроенного Tomcat в ваш проект
- Spring Data JPA – API сохранения данных Java и спящий режим
- Spring Boot DevTools – Очень полезные инструменты разработки
- Драйвер MySQL – Драйвер JDBC (может быть любой базой данных, которую вы хотите использовать)
После этого нажмите кнопку создать. Затем будет загружен zip-файл, содержащий созданный проект.
Использование пружинных ЗАЖИМОВ
Если у вас установлен Пружинный ЗАЖИМ , вы можете выбрать использование консоли для создания базового проекта с помощью этой команды:
Примечание: Spring CLI напрямую вызывает Spring Initializr для выполнения этой операции. Оба варианта приведут к созданию одного и того же проекта.
После создания базового проекта загрузите и импортируйте его в выбранную среду разработки или текстовый редактор. Если вы хотите создать, скомпилировать и запустить приложение через среду IDE, убедитесь, что вы импортировали его как проект Maven или Gradle .
При импорте сгенерированная база pom.xml в вашем проекте будет выглядеть так:
Все конфигурации, которые вы выполнили, будут отражены в этом файле. Кроме того, автоматически настраиваются зависимости по умолчанию, ваш базовый снимок 0.0.1-СНИМОК и плагин сборки Maven.
Для справки, если вы хотите создать проект Gradle , ваш build.gradle будет выглядеть следующим образом:
Подключение Spring Boot к базе данных
Далее, прежде чем мы начнем работать над приложением, мы захотим настроить базу данных. Это можно легко сделать с помощью Spring Data JPA, что позволяет нам настроить это соединение всего с помощью нескольких параметров.
Он абстрагирует все, что необходимо сделать разработчику, и позволяет нам переключать базовые базы данных, если мы захотим, просто изменив пару свойств.
Чтобы сообщить Spring, как подключиться к предпочитаемой вами базе данных, в файле application.properties вам нужно добавить некоторую элементарную информацию:
Здесь мы установили datasource.url для нашего URL-адреса подключения JDBC. Это зависит от вашей базы данных. Мы предоставили имя пользователя и пароль , необходимые для аутентификации в этой базе данных, а также установили для свойства ddl-auto значение обновить . Свойство jpa.hibernate.ddl-auto напрямую влияет на свойство hibernate.hbm2ddl.auto и, по сути, определяет, как Hibernate должен обрабатывать управление инструментами схемы.
Для производственных приложений это значение обычно устанавливается равным нет , поскольку управление поведением выделенного персонала. В процессе разработки чаще всего используется обновление , чтобы схема обновлялась при каждом перезапуске приложения , что обеспечивает гибкость при работе над разработкой.
Наконец, мы установили свойство hibernate.dialect . Hibernate имеет разные диалекты для разных баз данных. Он может автоматически устанавливать диалект в зависимости от вашей конфигурации, хотя для дополнительной безопасности всегда рекомендуется указывать его явно.
Модель домена – Создание модели пользователя
Теперь, когда подключение к базе данных запущено и запущено, мы можем перейти к модели Домена . Это набор классов, или , скорее, моделей , которые мы будем использовать в нашем приложении. В режиме гибернации они также называются Сущностями , а также аннотируются аннотацией @Entity .
Каждая @Сущность выбирается Hibernate, для нее создается таблица, поля сопоставляются, и она становится управляемой сущностью для настроенной вами базы данных.
Во-первых, давайте создадим простую пользовательскую сущность. Мы будем аннотировать класс с помощью @Entity и необязательной @Таблицы аннотации, чтобы указать имя нашей таблицы.
Если не задано, он будет просто использовать то же имя, что и класс:
Чтобы аннотировать поле как идентификатор сущности, вы используете аннотацию @Id , и она будет установлена в качестве автоматически увеличивающегося первичного ключа таблицы. Кроме того, вы можете дополнительно указать, что это @GeneratedValue , и установить Тип генерации в АВТО .
Это значение по умолчанию, если вы опустите @GeneratedValue аннотацию. Другими значениями, которые вы можете задать, являются ИДЕНТИФИКАТОР , ПОСЛЕДОВАТЕЛЬНОСТЬ и ТАБЛИЦА . Они заслуживают отдельной статьи о гибернации.
Кроме того, вы можете установить @Столбец аннотации для каждого из полей, указав имя для каждого из них , если вам нужны пользовательские имена – @Столбец(имя) , сохранит идентификатор поле как идентификатор пользователя вместо просто идентификатор .
Если вы хотите автоматизировать генерацию конструкторов, геттеров и сеттеров и просто избежать шаблонного кода в целом, вы можете использовать отличные инструменты, такие как Lombok .
Уровень Сохраняемости – Создание Классов Репозитория
Далее давайте поработаем над уровнем сохраняемости. Мы захотим иметь UserRepository для выполнения операций CRUD с нашими пользовательскими сущностями. Для этого мы укажем интерфейс, который расширяет CrudRepository , и снабдим его аннотацией @Репозиторий .
@Репозиторий является вариантом аннотации @Компонента , которая позволяет Spring знать, что это компонент, которым должен управлять контейнер IoC. В частности, репозитории предназначены для определения логики для уровня сохраняемости.
Расширение CrudRepository принимает класс сущности, а также тип данных id , который он должен использовать для запроса:
CrudRepository объявляет такие методы, как findAll () , findOne () и save () , которые составляют основную функциональность CRUD репозитория. Вы можете использовать этот UserRepository как есть для выполнения операций CRUD над Пользователями сущностями прямо сейчас, без дополнительной настройки.
Вы можете переопределить некоторые из этих действий, если хотите, однако, они настраиваются автоматически, чтобы помочь вам запустить некоторые базовые функции.
Бизнес – уровень- Создание контроллера
Наконец, мы добрались до бизнес-уровня, где реализуем реальную бизнес-логику обработки информации и используем компоненты уровня сохраняемости наряду с моделью домена для хранения данных.
Git Essentials
Ознакомьтесь с этим практическим руководством по изучению Git, содержащим лучшие практики и принятые в отрасли стандарты. Прекратите гуглить команды Git и на самом деле изучите это!
Давайте создадим контроллер, пометим его как @RestController , поскольку мы создаем REST API, и добавим в него @RequestMapping . @RestController – это просто комбинация @Controller и @ResponseBody , что означает, что вместо отображения страниц он будет просто отвечать данными, которые мы ему предоставили. Это естественно для API REST – возврат информации после попадания в конечную точку API.
Если вы хотите узнать больше о @RequestMapping и его производных вариантах , у нас есть отличная статья, посвященная именно этой теме!
Давайте продолжим и создадим UserController :
Мы @Autowired наша Учетная запись пользователя . Он используется для внедрения зависимостей, так как класс репозитория здесь является зависимостью. Если вы хотите узнать больше о Аннотациях основных фреймворков Spring , ознакомьтесь с нашим руководством!
Давайте начнем с реализации конечной точки final() :
Этот метод просто вызывает UserRepository для поиска всех() пользователей и возвращает список в качестве ответа.
Далее давайте реализуем конечную точку, чтобы получить каждого пользователя по его идентификатору :
A с заданным идентификатором может отсутствовать в базе данных, поэтому мы помещаем возвращенного Пользователя в Необязательный . Если вы хотите прочитать больше о Необязательно в Java 8 , у нас есть подробное руководство!
Наконец, давайте создадим конечную точку для сохранения пользователей:
Метод save() из репозитория пользователей сохраняет нового пользователя, если он еще не существует. Если пользователь с заданным идентификатором уже существует, он создает исключение. В случае успеха он возвращает сохраненного пользователя.
Теперь пришло время запустить приложение и проверить, работает ли оно.
Компиляция, сборка и запуск
Порт по умолчанию, в котором выполняется Spring Boot, является 8080 . Если вы хотите изменить порт по какой-либо причине, вы можете настроить его в своем файле application.properties :
Если у вас есть IDE, например IntelliJ , которая имеет обширную поддержку для запуска проектов Spring Boot, вы можете продолжить и запустить ее таким образом.
Если нет, мы будем использовать командную строку для запуска нашего проекта. Мы можем запустить приложение напрямую, выполнив ./mvn spring-boot:запустите (или ./gradlew bootRun , если вы используете Gradle ) в командной строке из папки базового проекта, где pom.xml находится.
Другой вариант-упаковать ваше приложение в файл jar и запустить его таким образом.
Для этого нам просто нужно выполнить ./mvn чистый пакет ( .gradlew сборка в Gradle) и запустить файл jar, выполнив эту команду:
Если вы используете Gradle, путь к файлу jar будет другим:
Вы узнаете, когда ваше приложение успешно запущено, если увидите эти журналы аудита в конце командной строки:
Тестирование API-интерфейсов
Для запросов GET мы можем использовать браузеры, curl или Postman – все, что вам наиболее удобно.
API вернет 200 в качестве ответа с этим в качестве тела ответа сохраненного пользователя:
Вывод
Вот оно у вас есть. Вы успешно создали свой собственный API Spring Boot REST!
В этом руководстве мы создали полностью функционирующий проект Spring Boot, который предоставляет API конечному пользователю. Используя этот API, пользователь может выполнять операции CRUD с Пользователем сущностью.
Мы рассмотрели Модель домена , Уровень сохраняемости , а также Бизнес-уровень после настройки подключения к базе данных и настройки проекта.
Работа с массивами данных, их структурирование, поиск соответствий между ними, фильтрация — все это основа любой программы, написанной на Java. Поэтому программистам важно иметь в своем арсенале инструменты, которые максимально упростили бы и структурировали работу с этими данными. Именно здесь и берут свое начало коллекции фреймворков на Java.
Обращение от редакции: Нашим защитникам из 3-го отдельного батальона УДА, которые находятся в Запорожской области, нужны вещи, чтобы противостоять врагу: квадрокоптеры и смартфоны для управления ими, прицелы ночного видения. Реквизиты для перевода средств на карту monobank – Колонович Катерина, номер карты 5375411505235312. Просим приобщиться к сбору средств. Слава Украине!
Что такое Collections Framework
Это набор различных интерфейсов для работы с группами объектов при программировании на Java . Коллекции позволяют производить манипуляции с массивами (Array), очередями (Queue, Stack), списками (List), ключами и значениями (Map) и другими типами объектов.
Любая коллекция на Java строго структурирована: одни интерфейсы подчиняют другие, последние же — расширяют функционал своих «старших братьев» по иерархии.
Структура Java Collections Framework
В основе иерархической структуры Java Collections Framework лежит интерфейс Collection. Это главенствующий интерфейс. Общая коллекция вмещает в себя все остальные виды коллекций и позволяет работать с группами объектов благодаря основным методам, среди которых:
- add(…) — добавить;
- remove(…) — убрать;
- clear(…) — очистить.
Интерфейс Collection наследуется от Iterable, а значит все подчиненные ему коллекции являются итерируемыми вне зависимости от типа их реализации. Благодаря этому в Collection вы можете получить итератор, который позволит вам пройтись по другим интерфейсам коллекций.
Итератор позволит пройтись по другим интерфейсам коллекций
Интерфейсу Collection подчинены три главных интерфейса:
- Set — позволяет работать с множествами данных;
- List — взаимодействует со списками данных;
- Queue — работает с очередью.
Интерфейс Map работает с данными типа «ключ/значение». Он стоит в этом списке отдельно, и чуть позже я объясню, почему это так. А пока давайте пройдемся по основным типам коллекций и выясним, за что отвечает каждая из них.
Интерфейс List и его реализации — ArrayList и LinkedList
List — это упорядоченная коллекция, наиболее часто используемая в Java Collections Framework. Этот интерфейс контролирует, где вставлен каждый элемент списка. При работе с List пользователю доступны элементы списка по их целочисленному индексу (позиции в списке).
Работа с интерфейсом List
Интерфейс List имеет две стандартные реализации — ArrayList и LinkedList.
Смысл в том, что можно написать и другие реализации, но в JDK уже есть две, которые доступны «из коробки».
ArrayList содержит внутри себя массив, длина которого будет увеличиваться автоматически при добавлении в него новых элементов.
Вторая имплементация интерфейса List — класс LinkedList. Это список с двумя связями, где каждый элемент содержит ссылку на предшествующий и следующий элементы списка.
Вторая имплементация интерфейса List — класс LinkedList
ArrayList и LinkedList — идентичны, то есть их методы полностью совпадают. Они оба могут добавлять и извлекать элементы из любой части списка. Так в чем же отличие? Главная разница между ними в цикломатической сложности операций — количестве линейно независимых маршрутов, проходящих через код программы. Чем меньшее количество маршрутных точек будет проходить каждая отдельно взятая команда, тем быстрее будет работать программа.
Для наглядности различий в цикломатической сложности между двумя классами рассмотрим таблицу:
Различия в цикломатической сложности между классами LinkedList и ArrayList
Как видите, основные преимущества класса LinkedList связаны с операциями (iterator.remove() и ListIterator.add(E element) . Их цикломатическая сложность всегда будет равна О(1) . В случае добавления add(E element) лучше использовать LinkedList, а вот для get(int index) — ArrayList.
Так же дела обстоят с оператором add(int index, E element) . Цикломатическая сложность этой операции для LinkedList будет ниже только в том случае, если сам индекс будет равен нулю. Для всех остальных случаев разумнее использовать именно ArrayList.
Это же касается и операции remove : для класса LinkedList ее цикломатическая сложность будет вдвое меньше, чем для ArrayList. Забегая наперед скажу, что именно ArrayList используют в подавляющем случае работ в интерфейсе List.
Интерфейс Set
Set — это коллекция, которая не содержит повторяющихся элементов. Этот интерфейс создан для моделирования абстракций математического множества.
Иерархия Set включает в себя два интерфейса — SortedSet и NavigableSet — и три основных класса. О последних расскажу подробнее:
- HashSet — коллекция, которая не позволяет хранение одинаковых элементов благодаря содержанию в себе объекта HashMap. Он использует для хранения данных хэш-таблицы.
- LinkedHashSet — подобная HashSet, в которой элементы объединены между собой в порядковый список. В этом случае элементы хранятся в том же порядке, в котором и добавляются (благодаря содержанию в себе объекта LinkedHashMap).
- TreeSet — коллекция, которая использует для хранения элементов упорядоченное по значениям дерево. TreeSet содержит в себе TreeMap — коллекцию, которая использует для хранения своих элементов сбалансированное красно-черное бинарное дерево. Благодаря этому операции add , remove и contains в этой коллекции займут гарантированное время, равное log(n) . А это — весомое преимущество по сравнению с другими имплементациями интерфейса Set .
Интерфейс Queue
Все мы не любим очереди: кому нравится напрасно тратить свое время в ожидании чего-то? Но вы точно полюбите очереди, если научитесь с ним работать 🙂 В Java Collections Framework за работу с очередью отвечает интерфейс Queue, который имеет довольно простую иерархию:
Queue способен упорядочить элементы в очереди по двум основным типам:
- при помощи полученного в конструкторе интерфейса Comparator, который сравнивает новые объекты в очереди с предыдущими;
- с помощью интерфейса Comparable, который необходим для упорядочения элементов в соответствии с их натуральным порядком.
Интерфейс Map
Это коллекция предназначена для работы с данными типа «ключ/значение». Под ключом мы имеем ввиду объект, который используем для извлечения данных, которые он в себе содержит. В структурном плане Map не наследует коллекцию Iterable и имеет ряд уникальных методов, характерных только для него.
У этого интерфейса схожая с Set структурная иерархия классов. Map реализуется с помощью четырех имплементаций: HashMap, TreeMap (о них я писал выше), LinkedHashMap и WeakHashMap:
- LinkedHashMap расширяет функционал HashMap и способен организовать перебор элементов в первоначальном порядке. То есть при осуществлении итерации по методу LinkedHashMap все объекты будут возвращены в строгом порядке их добавления.
- WeakHashMap — класс, который организовывает слабые ссылки объектов со своими ключами. Используется для динамических объектов. Например, при построении систем с функцией сбора мусора. Она не вносится в перечень объектов, подлежащих удалению из-за того, что игнорируется сборщиком мусора при выявлении объектов, которые в ней содержаться.
Коллекции в Java достаточно объемны. Они содержат в себе массу интерфейсов и реализаций, о которых точно можно написать не одну статью.
При этом именно Java Collections Framework включает в себя весь функционал, необходимый для написания многозадачного кода любой сложности.
Правильное понимание принципов работы с коллекциями останется одним из главных навыков для качественного программирования на Java.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Читайте также: