【问题标题】:Best structure for buffer缓冲区的最佳结构
【发布时间】:2017-05-10 08:32:20
【问题描述】:

我正在实现一个缓冲区,但我不确定应该使用哪种结构。

我在想一个 LinkedList,或者,即使我不需要存储任何值,一个 HashMap(但我可以简单地放一个空值)。

因为containsKey 的复杂度是O(1),所以我考虑使用HashMap 作为最高效率。

LinkedList.contains 的复杂度是 O(N)

但是,我仍然不确定是否应该丢弃 LinkedList 或任何其他结构。

谢谢。

【问题讨论】:

    标签: java performance data-structures buffer complexity-theory


    【解决方案1】:

    缓冲区应该尽可能快,所以我会使用array(就像大多数算法使用的那样),O(1) 的复杂度是你能得到的最好的。其他结构需要调用方法(额外的时间),此外hashmap,即使有 O(1) 访问,也可能非常慢,当put 和@987654324 @ 方法由于散列冲突而被频繁调用。

    【讨论】:

    • 但我需要随机删除元素。使用数组时,我需要随时迭代数组以找到要删除的元素。
    • 您可以这样做:将对象放入数组中,将使用过的索引附加到对象上。删除时,您只需使用附加索引来查找它在数组中的位置。
    • 是的,我能做到。当然,通过删除你的意思是设置 cell = null,对吧?因为否则在每次删除时,我都需要创建一个新数组并将剩余元素复制到其中。
    • 当然,否则它就不是缓冲区——缓冲区总是固定大小的。注意,hashmap 也是固定大小的结构(对象存储在固定大小的数组中,其中 index 是对象的(hashcode mod array.length)),但是当没有空间 i 时它可以扩展它的大小。 e.它创建具有双倍大小的新底层数组并将对象重新散列到新数组中。
    • 如果你需要遍历一个数组,你只需要跳过空位置。希望对您有所帮助。
    猜你喜欢
    • 1970-01-01
    • 2014-08-22
    • 1970-01-01
    • 2012-02-06
    • 1970-01-01
    • 2014-07-21
    • 1970-01-01
    • 2013-03-10
    • 2021-12-16
    相关资源
    最近更新 更多