プリミティブ(int、char、doubleなど)で使用できる Vector
orクラスと同等の拡張可能な配列クラスがJava APIにありますか?ArrayList
整数用の高速で拡張可能な配列が必要であり、またはInteger
で使用するためにそれらをクラスでラップする必要があるのは無駄に思えます。私のgoogle-fuは私を失敗させています。Vector
ArrayList
プリミティブ(int、char、doubleなど)で使用できる Vector
orクラスと同等の拡張可能な配列クラスがJava APIにありますか?ArrayList
整数用の高速で拡張可能な配列が必要であり、またはInteger
で使用するためにそれらをクラスでラップする必要があるのは無駄に思えます。私のgoogle-fuは私を失敗させています。Vector
ArrayList
残念ながら、少なくとも 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
http://trove4j.sourceforge.net/
Troveライブラリは、Java用の高速の通常のプリミティブコレクションを提供します。
Troveはプリミティブを使用するため、Troveが定義する型はjava.utilコレクションインターフェイスを実装しないことに注意してください。
(LGPLライセンス)
最新の Java はプリミティブのオートボクシングをサポートしているため、次のように言えます。
List<Integer> lst = new ArrayList<Integer>;
lst.add(42);
これにより、少なくとも new Integer(42) のシンタックス ビネガーが回避されます。
Java用のプリミティブコレクションもありますが、少し古くなっています。
Eclipse コレクションには、プリミティブ セット、バッグ、スタック、およびマップだけでなく、すべてのプリミティブ タイプのプリミティブ ArrayLists があります。すべてのプリミティブ コンテナー タイプの不変バージョンもあります。
注: 私は Eclipse コレクションのコミッターです。