23

プリミティブ(int、char、doubleなど)で使用できる Vectororクラスと同等の拡張可能な配列クラスがJava APIにありますか?ArrayList

整数用の高速で拡張可能な配列が必要であり、またはIntegerで使用するためにそれらをクラスでラップする必要があるのは無駄に思えます。私のgoogle-fuは私を失敗させています。VectorArrayList

4

5 に答える 5

37

残念ながら、少なくとも 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アクセス (おそらく a 経由Map) の一般的な原因でもあります。

Map<String, Integer> m = new HashMap<String, Integer>();
m.put("Hello", 5);
int i = m.get("Helo Misspelt"); //will throw a NullPointerException
于 2009-08-19T18:03:33.720 に答える
13

http://trove4j.sourceforge.net/

Troveライブラリは、Java用の高速の通常のプリミティブコレクションを提供します。

Troveはプリミティブを使用するため、Troveが定義する型はjava.utilコレクションインターフェイスを実装しないことに注意してください。

(LGPLライセンス)

于 2009-08-19T17:59:57.347 に答える
6

最新の Java はプリミティブのオートボクシングをサポートしているため、次のように言えます。

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

これにより、少なくとも new Integer(42) のシンタックス ビネガーが回避されます。

于 2009-08-19T18:04:37.680 に答える
5

Joda-プリミティブ

Java用のプリミティブコレクションもありますが、少し古くなっています。

于 2009-08-19T18:02:35.623 に答える
2

Eclipse コレクションには、プリミティブ セット、バッグ、スタック、およびマップだけでなく、すべてのプリミティブ タイプのプリミティブ ArrayLists があります。すべてのプリミティブ コンテナー タイプの不変バージョンもあります。

注: 私は Eclipse コレクションのコミッターです。

于 2016-09-07T05:34:38.140 に答える