问题 Java相当于std :: deque


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

  1. O(1)在开始/结束时插入/移除的性能
  2. O(1)按索引查找的性能
  3. 是可成长的集合(不需要固定大小的边界)

是否有Java等同于此?我找到了Java 1.6 [ArrayDeque]类,它具有插入/删除和可增长的特性,但似乎没有按索引查找,除非你调用toArray(),它不是O(1)。


5184
2017-12-08 16:26


起源



答案:


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

http://sourceforge.net/projects/pcj

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

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

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


10
2017-12-08 16:35



GNU类路径的数据源ArrayDeque在这里: fuseyism.com/classpath/doc/java/util/ArrayDeque-source.html。添加get(i)或者甚至使它实现List <E>应该相当容易 - tgamblin
PCJ仅适用于原始类型,而是限制其有用性。 - Michael Myers♦
有趣...... GNU的东西吓到我了(虽然你列出的ArrayDeque代码的许可证显示了知识共享......很奇怪),因为我在商业环境中工作,不能使用任何GPL代码。 - Jason S
您可以在以下位置使用JSR166 backport: backport-jsr166.sourceforge.net  它被释放到公共领域;没有许可问题。 - bajafresh4life


答案:


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

http://sourceforge.net/projects/pcj

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

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

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


10
2017-12-08 16:35



GNU类路径的数据源ArrayDeque在这里: fuseyism.com/classpath/doc/java/util/ArrayDeque-source.html。添加get(i)或者甚至使它实现List <E>应该相当容易 - tgamblin
PCJ仅适用于原始类型,而是限制其有用性。 - Michael Myers♦
有趣...... GNU的东西吓到我了(虽然你列出的ArrayDeque代码的许可证显示了知识共享......很奇怪),因为我在商业环境中工作,不能使用任何GPL代码。 - Jason S
您可以在以下位置使用JSR166 backport: backport-jsr166.sourceforge.net  它被释放到公共领域;没有许可问题。 - bajafresh4life


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


0
2017-12-08 17:11



我删除了关于HashMap的帖子,但是对于我认为的任意插入,它将比ArrayList有所改进。 - Daddy Warbox


有意思......我刚读完了 Java泛型和集合 它简要讨论了这种集合,包括链接到 Java专家通讯 其中包括一个可能做我需要的CircularArrayList。


0
2017-12-22 21:06





这是一个随时可用的 用Java实现的循环缓冲区,CircularArrayList。但是,它不会在创作后成长。 (免责声明:此链接指向我自己的网站

在网络上浮动的另一个选择是 一个来自Java专家通讯。我从未使用过那个,原因如下:

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

0
2017-07-14 17:44