Коллекции в Java. Часть 5.
Интерфейс List и его реализации — ArrayList и LinkedList.
List – интерфейс, который традиционно рассматривают первым и которым пользуются чаще всего.
Название переводится как «список»: интерфейс представляет собой упорядоченную коллекцию данных, похожую на массив. Это значит, что у его элементов есть порядковые номера, показывающие их расположение в списке, – индексы. Но, в отличие от массива, List динамический, о чем я говорил выше, — в нем можно изменять количество элементов.
Интерфейс List имеет две стандартные реализации — ArrayList и LinkedList.
Смысл в том, что можно написать и другие реализации, но в JDK уже есть две, которые доступны «из коробки».
ArrayList содержит внутри себя массив, длина которого будет увеличиваться автоматически при добавлении в него новых элементов.
Вторая имплементация интерфейса List — класс LinkedList. Это список с двумя связями, где каждый элемент содержит ссылку на предшествующий и следующий элементы списка. Только у первого элемента ссылка на предшествующий элемент будет null, и ссылка у последнего элемента коллекции на следующий элемент будет тоже null, что вполне логично, согласны?
Методы у них одинаковые, но действия с такими списками различаются сложностью выполнения и скоростью.
Методы add() и remove() в связанном списке LinkedList имеют фиксированную скорость выполнения, поэтому оптимальнее. А вот обращение к элементу по индексу быстрее в ArrayList.
👩💻 Наш практический курс Java–разработчика
✅ JavaStart. Подписаться
Интерфейс List и его реализации — ArrayList и LinkedList.
List – интерфейс, который традиционно рассматривают первым и которым пользуются чаще всего.
Название переводится как «список»: интерфейс представляет собой упорядоченную коллекцию данных, похожую на массив. Это значит, что у его элементов есть порядковые номера, показывающие их расположение в списке, – индексы. Но, в отличие от массива, List динамический, о чем я говорил выше, — в нем можно изменять количество элементов.
Интерфейс List имеет две стандартные реализации — ArrayList и LinkedList.
Смысл в том, что можно написать и другие реализации, но в JDK уже есть две, которые доступны «из коробки».
ArrayList содержит внутри себя массив, длина которого будет увеличиваться автоматически при добавлении в него новых элементов.
Вторая имплементация интерфейса List — класс LinkedList. Это список с двумя связями, где каждый элемент содержит ссылку на предшествующий и следующий элементы списка. Только у первого элемента ссылка на предшествующий элемент будет null, и ссылка у последнего элемента коллекции на следующий элемент будет тоже null, что вполне логично, согласны?
Методы у них одинаковые, но действия с такими списками различаются сложностью выполнения и скоростью.
Методы add() и remove() в связанном списке LinkedList имеют фиксированную скорость выполнения, поэтому оптимальнее. А вот обращение к элементу по индексу быстрее в ArrayList.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5✍2👨💻2
Коллекции в Java. Часть 6.
Vector и его потомок Stack.
Есть еще две реализации, о которых говорят реже. Это Vector и его потомок Stack. Vector похож на ArrayList, но сейчас им не рекомендуют пользоваться — он синхронизированный, за счет этого более потокобезопасный, но менее производительный. Исключение — редкие ситуации с высокими требованиями к потоковой безопасности.
Stack — это стек, работающий по принципу LIFO (last in, first out). Доступ начинается с того элемента, который добавлен в структуру последним, как взятие верхней карты из колоды. Его же быстрее всего можно удалить. Для просмотра последнего элемента есть метод peek(), для просмотра с удалением — pop(), а для добавления элемента в конец — push().
👩💻 Наш практический курс Java–разработчика
✅ JavaStart. Подписаться
Vector и его потомок Stack.
Есть еще две реализации, о которых говорят реже. Это Vector и его потомок Stack. Vector похож на ArrayList, но сейчас им не рекомендуют пользоваться — он синхронизированный, за счет этого более потокобезопасный, но менее производительный. Исключение — редкие ситуации с высокими требованиями к потоковой безопасности.
Stack — это стек, работающий по принципу LIFO (last in, first out). Доступ начинается с того элемента, который добавлен в структуру последним, как взятие верхней карты из колоды. Его же быстрее всего можно удалить. Для просмотра последнего элемента есть метод peek(), для просмотра с удалением — pop(), а для добавления элемента в конец — push().
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3✍2👨💻2
Please open Telegram to view this post
VIEW IN TELEGRAM
😁10✍3👍2
Please open Telegram to view this post
VIEW IN TELEGRAM
😁5💯3✍2👍1
Коллекции в Java. Часть 7.
Set и его реализации.
Set, или набор, — это математическое множество, реализованное в языке программирования. Если проще, это коллекция уникальных значений. Ни одно из них не повторяется в рамках одного сета.
Для проверки равенства у такой коллекции есть специальный метод equals().
Коллекция не упорядочена, то есть у ее элементов нет порядковых номеров и четких позиций следования. Это может понадобиться при хранении разных структур данных, например имен пользователей сайта: никнеймы уникальны, а порядковых номеров у них нет.
У Set есть два дочерних интерфейса SortedSet и NavigableSet — соответственно, отсортированный и навигируемый сеты. Фактических реализаций три, и о них стоит поговорить подробнее.
Здесь будет посложнее для понимания)
Часто используется реализация HashSet — это сет или множество, которое не позволяет хранение одинаковых элементов благодаря содержанию в себе объекта HashMap. Он использует для хранения данных хэш-таблицы. Хэш-таблица реализована с помощью HashMap — одной из реализаций интерфейса Map, о котором мы поговорим позже.
LinkedHashSet — множество, подобное HashSet, в котором элементы объединены между собой в порядковый список. В этом случае элементы хранятся в том же порядке, в котором и добавляются (благодаря содержанию в себе объекта LinkedHashMap).
TreeSet — коллекция, которая использует для хранения элементов упорядоченное по значениям дерево. TreeSet содержит в себе TreeMap — коллекцию, которая использует для хранения своих элементов сбалансированное красно-черное бинарное дерево. Благодаря этому операции add, remove и contains в этой коллекции очень быстрые (относительно алгоритмической сложности). А это — весомое преимущество по сравнению с другими имплементациями интерфейса Set.
👩💻 Наш практический курс Java–разработчика
✅ JavaStart. Подписаться
Set и его реализации.
Set, или набор, — это математическое множество, реализованное в языке программирования. Если проще, это коллекция уникальных значений. Ни одно из них не повторяется в рамках одного сета.
Для проверки равенства у такой коллекции есть специальный метод equals().
Коллекция не упорядочена, то есть у ее элементов нет порядковых номеров и четких позиций следования. Это может понадобиться при хранении разных структур данных, например имен пользователей сайта: никнеймы уникальны, а порядковых номеров у них нет.
У Set есть два дочерних интерфейса SortedSet и NavigableSet — соответственно, отсортированный и навигируемый сеты. Фактических реализаций три, и о них стоит поговорить подробнее.
Здесь будет посложнее для понимания)
Часто используется реализация HashSet — это сет или множество, которое не позволяет хранение одинаковых элементов благодаря содержанию в себе объекта HashMap. Он использует для хранения данных хэш-таблицы. Хэш-таблица реализована с помощью HashMap — одной из реализаций интерфейса Map, о котором мы поговорим позже.
LinkedHashSet — множество, подобное HashSet, в котором элементы объединены между собой в порядковый список. В этом случае элементы хранятся в том же порядке, в котором и добавляются (благодаря содержанию в себе объекта LinkedHashMap).
TreeSet — коллекция, которая использует для хранения элементов упорядоченное по значениям дерево. TreeSet содержит в себе TreeMap — коллекцию, которая использует для хранения своих элементов сбалансированное красно-черное бинарное дерево. Благодаря этому операции add, remove и contains в этой коллекции очень быстрые (относительно алгоритмической сложности). А это — весомое преимущество по сравнению с другими имплементациями интерфейса Set.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
✍4👍3👨💻2
✍4👍2👨💻2
Коллекции в Java. Часть 8.
Третий прямой наследник Collection — очередь, или Queue и его реализации.
Очередь и стек — два похожих формата, которые различаются принципом доступа к элементам.
Если в стеке мы имеем быстрый доступ к последним добавленным частям, то в очереди — к тем, которые были добавлены первыми. Такой принцип называется FIFO (first in, first out) и действительно напоминает живую очередь.
Соответственно, быстро получить и удалить элемент можно из начала очереди, а добавить — только в ее конец.
У Queue две основных реализации. Одна из них — PriorityQueue, прямая реализация, которая по умолчанию сортирует элементы в порядке их появления в очереди. Но это можно переопределить в конструкторе — специальном методе для создания объекта. Там можно задать связь с интерфейсом Comparator, который будет сравнивать элементы очереди и располагать их в зависимости от значений.
Вторая реализация чуть сложнее. У Queue есть потомок под названием Deque (читается как «дек»). Он расширяет Queue и добавляет возможность создавать коллекции, работающие по принципу LIFO — мы говорили о нем выше. По сути, получается двунаправленная очередь. Так вот вторая реализация называется ArrayDeque и технически является реализацией интерфейса Deque, а не Queue. Но Deque — потомок Queue, так что ArrayDeque периодически называют реализацией Queue.
Упомянутый выше LinkedList — реализация, принадлежащая не только List, но и Deque.
В целом, Queue редко используется, достаточно знать, что это и в чем ее суть, чтобы упомянуть это при рассказе на собеседовании о коллекциях в целом.
👩💻 Наш практический курс Java–разработчика
✅ JavaStart. Подписаться
Третий прямой наследник Collection — очередь, или Queue и его реализации.
Очередь и стек — два похожих формата, которые различаются принципом доступа к элементам.
Если в стеке мы имеем быстрый доступ к последним добавленным частям, то в очереди — к тем, которые были добавлены первыми. Такой принцип называется FIFO (first in, first out) и действительно напоминает живую очередь.
Соответственно, быстро получить и удалить элемент можно из начала очереди, а добавить — только в ее конец.
У Queue две основных реализации. Одна из них — PriorityQueue, прямая реализация, которая по умолчанию сортирует элементы в порядке их появления в очереди. Но это можно переопределить в конструкторе — специальном методе для создания объекта. Там можно задать связь с интерфейсом Comparator, который будет сравнивать элементы очереди и располагать их в зависимости от значений.
Вторая реализация чуть сложнее. У Queue есть потомок под названием Deque (читается как «дек»). Он расширяет Queue и добавляет возможность создавать коллекции, работающие по принципу LIFO — мы говорили о нем выше. По сути, получается двунаправленная очередь. Так вот вторая реализация называется ArrayDeque и технически является реализацией интерфейса Deque, а не Queue. Но Deque — потомок Queue, так что ArrayDeque периодически называют реализацией Queue.
Упомянутый выше LinkedList — реализация, принадлежащая не только List, но и Deque.
В целом, Queue редко используется, достаточно знать, что это и в чем ее суть, чтобы упомянуть это при рассказе на собеседовании о коллекциях в целом.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4✍2👨💻2
Коллекции в Java. Часть 9.
Интерфейс Map.
Интерфейс Map технически не относится к иерархии коллекций Collection. Он не является потомком Iterable и, соответственно, Collection, у него нет общих для коллекций методов, это другой вид объекта, и методы у него свои. Но я решил упомянуть о нем именно в контексте коллекций, потому что они часто объясняются и используются вместе. При этом Map — другой вид объекта, и принцип построения у него отличается.
На собеседованиях на Junior Java разработчика и стажера, когда вы рассказываете о иерархии Collection, обязательно упоминайте об интерфейсе Map! Это неотъемлемая часть структур данных в Java, да и не только в Java.
Map, «карта», он же «словарь» или ассоциативный массив — это список формата «ключ-значение». Представьте себе таблицу, где данные указаны, например, в таком формате:
Имя: Иван
Фамилия: Иванов
«Имя» и «Фамилия» будут ключами, а «Иван» и «Иванов» — значениями. По такому принципу данные хранятся в Map: вместо индексов у них ключи. Map не итерируется, потому что сложно сказать, какой из ключей можно назвать «первым», а какой «вторым», — это неупорядоченная структура.
Интерфейс Map.
Интерфейс Map технически не относится к иерархии коллекций Collection. Он не является потомком Iterable и, соответственно, Collection, у него нет общих для коллекций методов, это другой вид объекта, и методы у него свои. Но я решил упомянуть о нем именно в контексте коллекций, потому что они часто объясняются и используются вместе. При этом Map — другой вид объекта, и принцип построения у него отличается.
На собеседованиях на Junior Java разработчика и стажера, когда вы рассказываете о иерархии Collection, обязательно упоминайте об интерфейсе Map! Это неотъемлемая часть структур данных в Java, да и не только в Java.
Map, «карта», он же «словарь» или ассоциативный массив — это список формата «ключ-значение». Представьте себе таблицу, где данные указаны, например, в таком формате:
Имя: Иван
Фамилия: Иванов
«Имя» и «Фамилия» будут ключами, а «Иван» и «Иванов» — значениями. По такому принципу данные хранятся в Map: вместо индексов у них ключи. Map не итерируется, потому что сложно сказать, какой из ключей можно назвать «первым», а какой «вторым», — это неупорядоченная структура.
👍3✍2❤1👨💻1
У Map три непосредственных реализации и один дочерний интерфейс, который в свою очередь имеет свою реализацию. Дочерний интерфейс называется SortedMap, от него наследуется еще один интерфейс NavigableMap, а уже у него есть реализация под названием TreeMap — карта в виде дерева. Структурирование дерева в сете возможно благодаря наличию в объекте элемента TreeMap для хранения позиций
Непосредственные реализации — это Hashtable, HashMap, LinkedHashMap.
Hashtable — это хэш-таблица, такая реализация сейчас не рекомендована к использованию: она синхронизированная и из-за этого работает медленнее современных методов.
HashMap — более новая альтернатива Hashtable. Она отличается от предыдущей двумя деталями: HashMap не синхронизированная, а еще в ней можно в качестве значения или ключа хранить null — «отсутствие», нулевую или пустую сущность. Эта реализация не отсортирована.
LinkedHashMap — это отсортированный словарь. В нем элементы располагаются не случайно, в зависимости от хэша, а в порядке добавления.
Вообще, как мы с вами уже заметили, коллекции в Java достаточно объемны. Они содержат в себе массу интерфейсов и реализаций, о которых точно можно написать не одну статью и даже не две. И правильное понимание принципов работы с коллекциями останется навсегда одним из главных навыков для качественной разработки на Java.
👩💻 Наш практический курс Java–разработчика
✅ JavaStart. Подписаться
Непосредственные реализации — это Hashtable, HashMap, LinkedHashMap.
Hashtable — это хэш-таблица, такая реализация сейчас не рекомендована к использованию: она синхронизированная и из-за этого работает медленнее современных методов.
HashMap — более новая альтернатива Hashtable. Она отличается от предыдущей двумя деталями: HashMap не синхронизированная, а еще в ней можно в качестве значения или ключа хранить null — «отсутствие», нулевую или пустую сущность. Эта реализация не отсортирована.
LinkedHashMap — это отсортированный словарь. В нем элементы располагаются не случайно, в зависимости от хэша, а в порядке добавления.
Вообще, как мы с вами уже заметили, коллекции в Java достаточно объемны. Они содержат в себе массу интерфейсов и реализаций, о которых точно можно написать не одну статью и даже не две. И правильное понимание принципов работы с коллекциями останется навсегда одним из главных навыков для качественной разработки на Java.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4👨💻3✍2
Please open Telegram to view this post
VIEW IN TELEGRAM
😁7💯3✍1
Что делает функция SUM в языке SQL?
Anonymous Quiz
1%
Извлекает максимальное значение в столбце
0%
Вычисляет среднее значение столбца
7%
Подсчитывает общее количество строк в таблице
90%
Вычисляет сумму значений в столбце
3%
Посмотреть ответ
👍3✍2🎉2