Java Vector或ArrayList for Primitives

时间:2009-08-19 17:58:05

标签: java vector arraylist primitive-types primitive

Java API中是否有可扩展的数组类,可以与基元(int,char,double等)一起使用的VectorArrayList类相同?

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

5 个答案:

答案 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)

Joda-Primitives

还有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的提交者。