Java Vector或ArrayList for Primitives
Java API中是否有一个可扩展的数组类,它等同于Vector
或ArrayList
类,可以与原语(int,char,double等)一起使用?
我需要一个快速,可扩展的整数数组,并且将它们包装在Integer
类中以便将它们与Vector
或ArrayList
一起使用似乎很浪费。 我的google-fu让我失望了。
遗憾的是,至少在Java API中没有这样的类 。 Java第三方产品有Primitive Collections 。
将自动装箱与现有集合类(特别是List
实现)一起使用是非常危险的。 例如:
List l = new ArrayList (); l.add(4); l.remove(4); //will throw ArrayIndexOutOfBoundsException l.remove(new Integer(4)); //what you probably intended!
它也是神秘的NullPointerExceptions
访问的常见来源(可能通过Map
):
Map m = new HashMap(); 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 lst = new ArrayList ; lst.add(42);
这至少避免了新整数的句法醋(42)。
Joda-Primitives 。
还有Java的Primitive Collections,但它有点过时了。
Eclipse Collections具有适用于所有基本类型的原始ArrayLists,以及原始集,包,堆栈和映射。 还有所有原始容器类型的不可变版本。
注意:我是Eclipse Collections的提交者。