Сейчас версией с долгосрочной поддержкой является Java 21
Разберемся в изданиях Java:
Java Platform Standard Edition (Java SE) - стандартная редакция Java, которая использует для разработки простых приложений
Java Platform Enterprise Edition (Java EE) - редакция для предприятий
Java Platform Micro Edition (Java ME) - редакция для разработки ПО на микроконтроллерах, мобильные платформы и т.д.
Комитет Java Community Process определяет, как будут выглядеть будущие спецификации Java
Классы в Java как правило объединены в пакеты. По умолчанию, стандартная библиотека Java содержит пакеты java.lang
, java.io
, java.util
и другие. Организация классов в пакеты позволяет избежать коллизии имен.
В Java все коллекции представлены в Java Collections Framework наследуются от интерфейса java.util.Collection
. Сам интерфейс java.util.Collection
наследуется от интерфейса java.util.Iterable
, позволяющий итерироваться по коллекции.
В Java в качестве динамического списка используют ArrayList
(с произвольным доступом по индексу) и LinkedList
(с последовательный доступом)
Vector
в Java работает так же, как и ArrayList
, но Vector
потокобезопасный. Также Vector
расширяется вдвое, а ArrayList
в 1,5 раза
Помимо них есть:
Stack
- стек, реализованный на Vector
Queue
- односторонняя очередь
Deque
- двухсторонняя очередь
Set
- множество; реализации на хеш-таблице HashSet
и на дереве TreeSet
Map
- словарь; реализации на хеш-таблице HashMap
и на дереве TreeMap
В java.util.concurrent
существуют потокобезопасные версии коллекций
Помимо Java Collections Framework другие фреймворки, такие как Google Guava и Apache Commons Collections, реализуют свои коллекции
Чтобы обрабатывать коллекции, в Java есть Stream API. Работает он как LINQ в C#:
Создаем поток из коллекции: list.stream()
Применяем промежуточные методы, такие как filter()
, map()
, sorted()
Применяем терминальный метод, например, count()
, findFirst()
, toList()
Пример:
list
.stream()
.filter(x -> x.toString().length() == 3)
.forEach(System.out::println);
list.stream().forEach(x -> System.out.println(x));