В Kotlin указаны структуры данных, такие как стек, очередь, куча, дерево и т. Д. c. поддерживается через стандартную библиотеку? - PullRequest
0 голосов
/ 28 марта 2020

В Kotlin - такие структуры данных, как стек, очередь, куча, дерево и т. Д. c. поддерживается через стандартную библиотеку?

Как человек, в основном знакомый с Python, но не использовавший Java до перехода на Kotlin, этот вопрос пришел мне в голову.

Например, Если вы хотите использовать Kotlin для конкурентного программирования или не хотите изобретать колесо, реализующее общие структуры данных, поддерживаются ли они через стандартную библиотеку? Или они не поддерживаются по какой-то причине Kotlin? По крайней мере, я не смог найти их в документации. Тогда, если кто-то использует Kotlin в JVM, люди обычно используют реализации из библиотеки Java?

1 Ответ

1 голос
/ 28 марта 2020
В этом случае

Kotlin в основном использует API-интерфейс Collection Java, поэтому вы можете использовать его свободно. API коллекции имеет 4 основных интерфейса:

  1. Список - упорядоченная последовательность элементов.
  2. Set - коллекция, в которой нет дубликатов.
  3. Очередь - коллекция, предназначенная для хранения элементов перед обработкой. Вы можете использовать его интерфейс FIFO. Также он расширен интерфейсом Deque , который поддерживает вставку и удаление элементов на обоих концах.
  4. Карта - объект, который сопоставляет ключи со значениями.

Большинство потребностей могут быть удовлетворены реализациями этого интерфейса.

Например, LinkedList в качестве классической c реализации в терминах структуры данных Doubly Linked List; также он реализует Deque. ArrayList реализует List интерфейс с внутренним использованием массива; он имеет гораздо более быстрый доступ к элементам благодаря природе эффективности индексированного доступа к массивам (за исключением случая, когда вы обращаетесь к первому или последнему элементу, потому что он идентичен), но вставки могут стоить вам на вставках не в конце или на вставках когда емкость внутреннего массива превышена, потому что тогда он должен быть повторно инициализирован и пополнен, что является ударом как по времени, так и по пространству. Внутренние Java System#arraycopy внутренне относительно быстры, хотя.

Оба стека и очереди также могут быть выполнены с ArrayDeque, что, опять же, является реализацией с поддержкой массива, но в этом случае Deque.

TreeMap использует алгоритм красно-черного дерева внутри; TreeSet использует TreeMap внутри, если вам нужны отдельные элементы, а не ассоциации.

Для реализаций на основе хеш-таблиц вы можете использовать HashMap для ассоциаций и HashSet для отдельных элементов соответственно (та же история с повторным использованием, как для основанных на дереве реализаций).

Для всех других вещей (потокобезопасных тоже - разработанных для параллелизма или простых применений блокировки применения) вы можете фактически найти соответствующие реализации этих интерфейсов - стандартная библиотека достаточно большой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...