Java Vector or ArrayList for Primitives

2019-01-17 15:40发布

Is there an expandable array class in the Java API equivalent to the Vector or ArrayList class that can be used with primitives (int, char, double, etc)?

I need a quick, expandable array for integers and it seems wasteful to have to wrap them in the Integer class in order to use them with Vector or ArrayList. My google-fu is failing me.

5条回答
smile是对你的礼貌
2楼-- · 2019-01-17 16:05

Modern Java supports autoboxing of primitives, so you can say

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

That at least avoids the syntactic vinegar of new Integer(42).

查看更多
混吃等死
3楼-- · 2019-01-17 16:06

http://trove4j.sourceforge.net/

The Trove library provides high speed regular and primitive collections for Java.

Note that because Trove uses primitives, the types it defines do not implement the java.util collections interfaces.

(LGPL license)

查看更多
何必那么认真
4楼-- · 2019-01-17 16:18

There is unfortunately no such class, at least in the Java API. There is the Primitive Collections for Java 3rd-party product.

It's pretty dangerous to use auto-boxing together with existing collection classes (in particular List implementations). For example:

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

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

And it is also a common source of mysterious NullPointerExceptions accessing (perhaps via a Map):

Map<String, Integer> m = new HashMap<String, Integer>();
m.put("Hello", 5);
int i = m.get("Helo Misspelt"); //will throw a NullPointerException
查看更多
Viruses.
5楼-- · 2019-01-17 16:25

Joda-Primitives.

There is also Primitive Collections for Java but it's a bit out of date.

查看更多
家丑人穷心不美
6楼-- · 2019-01-17 16:25

Eclipse Collections has primitive ArrayLists for all primitive types, as well as primitive Sets, Bags, Stacks and Maps. There are immutable versions of all of the primitive container types as well.

Note: I am a committer for Eclipse Collections.

查看更多
登录 后发表回答