Java API 中是否有一个可扩展的数组类等价于可与原语(int、char、double 等)一起使用 的Vector
or类?ArrayList
Integer
我需要一个快速、可扩展的整数数组,并且必须将它们包装在类中以便与Vector
or一起使用它们似乎很浪费ArrayList
。我的 google-fu 让我失望了。
Java API 中是否有一个可扩展的数组类等价于可与原语(int、char、double 等)一起使用 的Vector
or类?ArrayList
Integer
我需要一个快速、可扩展的整数数组,并且必须将它们包装在类中以便与Vector
or一起使用它们似乎很浪费ArrayList
。我的 google-fu 让我失望了。
不幸的是,至少在 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
http://trove4j.sourceforge.net/
Trove 库为 Java 提供高速的常规和原始集合。
请注意,因为 Trove 使用原语,所以它定义的类型不实现 java.util 集合接口。
(LGPL 许可证)
现代 Java 支持原语的自动装箱,所以你可以说
List<Integer> lst = new ArrayList<Integer>;
lst.add(42);
这至少避免了 new Integer(42) 的语法醋。
乔达原语。
Java也有Primitive Collections,但它有点过时了。
Eclipse Collections具有所有原始类型的原始 ArrayList,以及原始 Sets、Bags、Stacks 和 Maps。所有原始容器类型也有不可变的版本。
注意:我是 Eclipse Collections 的提交者。