23

Java API 中是否有一个可扩展的数组类等价于可与原语(int、char、double 等)一起使用 的Vectoror类?ArrayList

Integer我需要一个快速、可扩展的整数数组,并且必须将它们包装在类中以便与Vectoror一起使用它们似乎很浪费ArrayList。我的 google-fu 让我失望了。

4

5 回答 5

37

不幸的是,至少在 Java API 中没有这样的类。Java 3rd-party 产品的 Primitive Collections。

将自动装箱与现有的集合类(特别是List实现)一起使用是非常危险的。例如:

List<Integer> l = new ArrayList<Integer>();
l.add(4);

l.remove(4); //will throw ArrayIndexOutOfBoundsException
l.remove(new Integer(4)); //what you probably intended!

它也是神秘NullPointerExceptions访问的常见来源(可能通过 a Map):

Map<String, Integer> m = new HashMap<String, Integer>();
m.put("Hello", 5);
int i = m.get("Helo Misspelt"); //will throw a NullPointerException
于 2009-08-19T18:03:33.720 回答
13

http://trove4j.sourceforge.net/

Trove 库为 Java 提供高速的常规和原始集合。

请注意,因为 Trove 使用原语,所以它定义的类型不实现 java.util 集合接口。

(LGPL 许可证)

于 2009-08-19T17:59:57.347 回答
6

现代 Java 支持原语的自动装箱,所以你可以说

List<Integer> lst = new ArrayList<Integer>;
lst.add(42);

这至少避免了 new Integer(42) 的语法醋。

于 2009-08-19T18:04:37.680 回答
5

乔达原语

Java也有Primitive Collections,但它有点过时了。

于 2009-08-19T18:02:35.623 回答
2

Eclipse Collections具有所有原始类型的原始 ArrayList,以及原始 Sets、Bags、Stacks 和 Maps。所有原始容器类型也有不可变的版本。

注意:我是 Eclipse Collections 的提交者。

于 2016-09-07T05:34:38.140 回答