Java 相当于 std::d eque

2022-09-04 22:02:48

我是一个相对较新的Java程序员,来自C++ / STL,并且正在寻找一个具有以下特征的类(据我所知,std::d eque C++具有这些特征):

  1. O(1) 在开始/结束时插入/拔出的性能
  2. O(1) 按索引查找的性能
  3. 是可增长的集合(不需要固定大小限制)

有没有与此等效的Java?我发现Java 1.6 [ArrayDeque]类具有插入/删除和可增长的特征,但似乎没有按索引查找,除非你调用Array()而不是O(1)。


答案 1

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

http://sourceforge.net/projects/pcj

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

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

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


答案 2

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