jpz*_*jpz 11 data-structures kotlin
在Kotlin中,标准库是否支持堆栈、队列、堆、树等数据结构?
作为一个最熟悉 Python 但在进入 Kotlin 之前没有使用过 Java 的人,我想到了这个问题。
例如,如果想使用 Kotlin 进行竞争性编程,或者不想重新发明轮子来实现通用数据结构,标准库是否支持这些?或者由于 Kotlin 的某些设计原因不支持它们?至少我在文档中找不到这些。那么如果在 JVM 上使用 Kotlin,人们通常会使用 Java 库中的实现吗?
And*_*nin 13
在这种情况下,Kotlin 主要重用了 Java 的 Collection API,因此您可以自由地使用它。Collection API有4个主要接口:
该接口的实现可以满足大部分需求。
比如LinkedList
双向链表数据结构的经典实现;它还实现了Deque
. 内部使用数组ArrayList
实现接口;List
由于数组的索引访问效率本质,它的元素访问速度要快得多(访问第一个或最后一个元素的情况除外,因为它们是相同的),但插入确实会花费您在非最后插入或插入时的成本当超出内部数组的容量时,因为它应该重新初始化并重新填充,这对时间和空间来说都是一个打击。Java的内部System#arraycopy
速度相对较快。
Stack 和 Queue 都可以用 来实现ArrayDeque
,这又是一个数组支持的实现,但在本例中是Deque
.
TreeMap
内部使用红黑树算法;TreeSet
内部使用TreeMap
是您需要单个元素而不是关联。
对于基于哈希表的实现,您可以分别HashMap
用于关联和HashSet
单一元素(与基于树的实现的重用情况相同)。
对于所有其他事情(也是线程安全的 - 专为并发或简单的锁定应用装饰器而设计),您实际上可以搜索这些接口的适当实现 - 标准库足够大。
添加到上面的答案,Java对Heap的实现是PriorityQueue,适当地传递一个比较器,你可以在Kotlin中使用它没有问题。
文档:https://docs.oracle.com/javase/7/docs/api/java/util/PriorityQueue.html
检查更多:https ://www.geeksforgeeks.org/priority-queue-class-in-java-2/
归档时间: |
|
查看次数: |
9813 次 |
最近记录: |