具有进一步插入的升序键值对的数据结构

时间:2014-11-17 02:59:03

标签: data-structures linked-list treemap linkedhashmap

我正在实现一个表,其中每个条目由两个整数组成。条目必须按键按升序排序(根据每组的第一个整数)。当程序运行时,所有元素都将添加到表中,并且必须放在适当的插槽中。时间复杂性至关重要,我只会使用插入,删除和迭代函数。

哪种Java数据结构适合此实现?

我在想LinkedHashMap,因为它将键映射到值(我表中的每个条目都是两个值)。它还提供O(1)插入/删除功能。但是,它没有排序。如果条目可以在它们进入时以适当的顺序有效地插入,那么这不是一个坏主意,因为数据结构将被排序。但我没有阅读或想到有效的方法来做到这一点。 (也许像比较器)?

TreeMap的添加和删除时间复杂度为log(n)。它维护排序顺序并具有迭代器。但是我们能比log(n)做得更好吗?

LinkedList有O(1)添加/删除。我可以插入一个循环,但这似乎效率低下。

看起来TreeMap是可行的方式。但我不确定。

对此计划的理想数据结构的任何想法都非常感谢。如果我错过了一个明显的答案,请告诉我。

(它可以是具有Set接口的数据结构,因为不会有重复。)

2 个答案:

答案 0 :(得分:0)

key-value对建议Map。当您需要基于key的排序时,它会缩小为SortedMap,在您的情况下为TreeMap。至于将排序元素保存在数据结构中,它不能比O(logn)更好。不要再犹豫了。

答案 1 :(得分:0)

基本思路是您需要将钥匙插入适当的位置。为此,您的代码需要搜索“适当的位置”。现在,对于这样的搜索,你不能比二分搜索更好,这是log(n),这就是为什么我认为你不能执行比log(n)更好的插入。

因此,我会建议您使用TreeMap

此外,如果您声明的哈希值(特别是因为没有重复项)可以枚举(如整数,序列号等),您可以尝试使用静态分配的数组来执行此操作。那么你可能会得到O(1)的复杂性!