プリミティブのためのJavaのベクトルまたはArrayListを
-
18-09-2019 - |
質問
プリミティブ(int型、char型、ダブル、など)で使用することができますVector
またはArrayList
クラスに相当するJava APIの拡張可能配列クラスはありますか?
私は整数のための迅速、拡張可能な配列を必要とし、Integer
またはVector
でそれらを使用するためにArrayList
クラスでそれらをラップする必要が無駄なようです。私のGoogle-FUは私を失敗してます。
解決
少なくともJava APIの中で、残念ながらのいいえ、そのようなクラスはあります。 Javaののサードパーティ製品のプリミティブコレクションをrel="noreferrer"> href="http://pcj.sourceforge.net/"
これは、既存のコレクションクラス(特定の そしてそれはまた、神秘的な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
他のヒント
http://trove4j.sourceforge.net/する
トローブライブラリは、高速を提供します 以下のための定期的なプリミティブのコレクション ジャワます。
トローブはプリミティブを使用しているため、タイプ、それはjava.utilのコレクションインタフェースを実装していない定義することに注意してください。
(LGPLライセンス)
現代Javaはプリミティブのオートボクシングをサポートしていますので、あなたが言うことができます。
List<Integer> lst = new ArrayList<Integer>;
lst.add(42);
少なくとも新しい整数の構文酢を回避する(42)。
が存在するJava のプリミティブコレクションでもあるが、それは少し古くなっています。
のコレクションだけでなく、原始的なセット、バッグ、スタックrel="nofollow">そして、地図。原始的なコンテナ型のすべての不変のバージョンも同様にあります。
注:私は、Eclipseのコレクションのためのコミッターています。
。