Java API中是否有可扩展的数组类,可以与基元(int,char,double等)一起使用的Vector
或ArrayList
类相同?
我需要一个快速,可扩展的整数数组,将它们包装在Integer
类中以便将它们与Vector
或ArrayList
一起使用似乎很浪费。我的google-fu让我失望。
答案 0 :(得分:35)
遗憾的是,没有这样的类,至少在Java API中是这样。有Primitive Collections for Java第三方产品。
将自动装箱与现有集合类(特别是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
访问的常见来源(可能通过Map
):
Map<String, Integer> m = new HashMap<String, Integer>();
m.put("Hello", 5);
int i = m.get("Helo Misspelt"); //will throw a NullPointerException
答案 1 :(得分:13)
http://trove4j.sourceforge.net/
Trove库提供高速 常规和原始集合 Java的。
请注意,由于Trove使用基元,因此它定义的类型不实现java.util集合接口。
(LGPL许可证)
答案 2 :(得分:5)
还有Primitive Collections for Java,但它有点过时了。
答案 3 :(得分:5)
Modern Java支持原语的自动装箱,所以你可以说
List<Integer> lst = new ArrayList<Integer>;
lst.add(42);
这至少避免了新整数(42)的句法醋。
答案 4 :(得分:2)
Eclipse Collections具有适用于所有基本类型的原始ArrayLists,以及原始集,包,堆栈和映射。还有所有原始容器类型的不可变版本。
注意:我是Eclipse Collections的提交者。