2012-01-15 10 views
2

JavaのVectorクラスには、格納できる要素の量に制限がありますか?私はそれが自動的に成長し、任意の量の要素を格納することができるはずですが、実際に格納できる要素の量を制限する制限はありますか?メモリ不足のような最も明白な制限を除きます。JavaでVectorの要素の量に制限はありますか?

答えて

7

2つの制限があります

  • メモリ
  • 量最大整数値(Integer.MAX_VALUE)、基礎となる配列内の要素は整数指標

サイドノートによってインデックス付けされているので:Vectorを使用する予定の場合は、使用しないでください。代わりにArrayListを使用してください。これは同期されておらず、Collectionsフレームワークの他の部分とうまく適合します。まず

5

Vectorsize()は、32ビット符号付き整数でint、あるので、要素の最大数は2 ** 31-1又はおおよそ21億の要素です。

5

、あなたは、Java 1.1を使用している場合を除き、あなたがむしろVectorより通常使用ArrayList<E>必要があります。しかし、どちらも同じ制限があります。

基本的に、それらは配列によってバッキングされており、現在の "実際の"長さの値はintです。したがって、それに基づいて、Integer.MAX_VALUE以上のエントリを格納することはできません。しかし、とにかくこの点に達する前に、あなたはメモリが足りなくなる可能性が非常に高いです。実際には、私が見ていArrayListの実装はとにかくやや小さく制限されてい

、内部的に課さ:

/** 
* The maximum size of array to allocate. 
* Some VMs reserve some header words in an array. 
* Attempts to allocate larger arrays may result in 
* OutOfMemoryError: Requested array size exceeds VM limit 
*/ 
private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8; 
+0

我々は戻って2002年に日付を使用しているコード(およびいくつかの特定のJavaバージョンIドンなぜそれがArrayListではなくVectorを使うのかを説明しています Joost

+0

@JoostvanDoorn:1998年にJava 2が 'ArrayList'を導入しました。現在推奨されている 'ArrayList'にコードを更新する良い時期です... –

+0

私の大学のソフトウェア工学のクラスで使用されているので、私は使用されたコードには何の影響もありません。コードはかなり悪いですが、私が聞いたので、書き直すお金はありません。これは、Vectorの使用に関係するだけではありません。 – Joost

関連する問題