Java相当于std :: deque

时间:2008-12-08 16:26:35

标签: java collections deque

我是来自C ++ / STL的相对较新的Java程序员,我正在寻找具有这些特性的类(正如我所理解的那样,C ++ std :: deque所具有的):

  1. O(1)在开始/结束时插入/移除的性能
  2. O(1)按索引查找的性能
  3. 是可增长的集合(不需要固定大小的边界)
  4. 是否有Java等效于此?我找到了Java 1.6 [ArrayDeque]类,它具有插入/删除和可增长的特性,但似乎没有按索引查找,除非你调用toArray(),它不是O(1)。

4 个答案:

答案 0 :(得分:10)

Java的Primitive Collections有一个带有get(int idx)方法的ArrayDeque。

http://sourceforge.net/projects/pcj

我不能保证这个项目的质量。

另一种方法是获取JDK ArrayDeque源并自己添加get(int idx)方法。应该比较容易。

编辑:如果你打算以高度多线程的方式使用deque,我会选择“修补JDK的ArrayDeque”路由。此实现已经过彻底测试,并在新的java.util.concurrent ForkJoin框架中使用。

答案 1 :(得分:0)

我的默认方法是将我自己的类组合在一起,使用ArrayList作为底层实现(例如将我自己的类索引映射到ArrayList索引)......但是我讨厌重新发明轮子,特别是当有很好的机会搞砸时...

答案 2 :(得分:0)

有意思...我刚刚读完Java Generics and Collections并且对这种集合进行了简短的讨论,其中包括Java Specialists' Newsletter的链接,其中包含一个可能做我需要的CircularArrayList。 / p>

答案 3 :(得分:0)

这是一个随时可用的circular buffer implemented in Java, CircularArrayList。但是,在创作之后,它不会成长。 (免责声明:此链接指向我自己的网站

在网络上浮动的另一个选项是one from the Java Specialists Newsletter。我从未使用过那个,原因如下:

  1. 不完整 - (“此方法留给读者练习”)
  2. 它不支持通用元素类型,因为它与Java Collection的Framework中的其他集合一致。
  3. 这是不必要的复杂,因此可能是错误的,而不是遵循AbstractList的Javadoc推荐的扩展程序。