【问题标题】:Data structure which is good in insertion, removal and random access擅长插入、删除和随机访问的数据结构
【发布时间】:2011-10-10 07:43:16
【问题描述】:

目前,我正在寻找以下数据结构。

  1. 尾部插入速度快。
  2. 从头部快速移除。
  3. 能够执行随机访问。

我知道ArrayBlockingQueue 擅长 (1) 和 (2),ArrayList 擅长 (3)。是否有来自标准库/Apache 库/谷歌库的单一数据结构,可以让我同时满足所有 3 个要求?

【问题讨论】:

  • 我可以知道使用 ArrayBlockingQueue 背后的原因

标签: java performance data-structures


【解决方案1】:

我认为最适合您的数据结构是ringbuffer/circular buffer。环形缓冲区在恒定时间内执行所有三个操作。

可以在here 和许多其他here 找到实现

编辑: 环形缓冲区的问题在于,在最坏的情况下,您应该在一开始就知道该缓冲区中有多少元素。但也存在动态环形缓冲区。

【讨论】:

  • 我认为循环缓冲区是您想要的数据结构。动态缓冲区可以为您提供 O(1) 分期插入,与 ArrayList 相同,也可以为您提供 O(1) 删除(通过移动指针)。不知道有没有在普通的Java库中实现。
  • +1。这正是 OP 正在寻找的。我不认为在java.util 中实现了一个,但使用数组编写一个很容易。
【解决方案2】:

LinkedList 可能适合,如果速度对 3 不重要。请注意,ArrayBlockingQueue 是为多个线程将访问 List 的环境设计的。 ArrayList 和 LinkedList 不是。如果您需要从多个线程访问它们,则必须使用 Collections.synchronizedList() 包装它们。

【讨论】:

    【解决方案3】:

    LinkedHashMap 是你需要尝试的。它给你最好的。

    哈希和双链表数据结构的结合。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-27
      • 2013-02-22
      • 1970-01-01
      • 2014-03-04
      • 2018-11-16
      • 1970-01-01
      • 2015-08-01
      • 2011-08-06
      相关资源
      最近更新 更多