我正在实现一个表,其中每个条目由两个整数组成。条目必须按键按升序排序(根据每组的第一个整数)。当程序运行时,所有元素都将添加到表中,并且必须放在适当的插槽中。时间复杂性至关重要,我只会使用插入,删除和迭代函数。
哪种Java数据结构适合此实现?
我在想LinkedHashMap,因为它将键映射到值(我表中的每个条目都是两个值)。它还提供O(1)插入/删除功能。但是,它没有排序。如果条目可以在它们进入时以适当的顺序有效地插入,那么这不是一个坏主意,因为数据结构将被排序。但我没有阅读或想到有效的方法来做到这一点。 (也许像比较器)?
TreeMap的添加和删除时间复杂度为log(n)。它维护排序顺序并具有迭代器。但是我们能比log(n)做得更好吗?
LinkedList有O(1)添加/删除。我可以插入一个循环,但这似乎效率低下。
看起来TreeMap是可行的方式。但我不确定。
对此计划的理想数据结构的任何想法都非常感谢。如果我错过了一个明显的答案,请告诉我。
(它可以是具有Set接口的数据结构,因为不会有重复。)
答案 0 :(得分:0)
key-value
对建议Map
。当您需要基于key
的排序时,它会缩小为SortedMap
,在您的情况下为TreeMap
。至于将排序元素保存在数据结构中,它不能比O(logn)更好。不要再犹豫了。
答案 1 :(得分:0)
基本思路是您需要将钥匙插入适当的位置。为此,您的代码需要搜索“适当的位置”。现在,对于这样的搜索,你不能比二分搜索更好,这是log(n)
,这就是为什么我认为你不能执行比log(n)
更好的插入。
因此,我会建议您使用TreeMap
。
此外,如果您声明的哈希值(特别是因为没有重复项)可以枚举(如整数,序列号等),您可以尝试使用静态分配的数组来执行此操作。那么你可能会得到O(1)
的复杂性!