Java.util.ListでJava最大で追加できるデータの量は?
ArrayListのデフォルトサイズはありますか?
List
実装に依存します。 int
sを使用して配列のインデックスを作成するため、ArrayList
はInteger.MAX_VALUE
要素。ただし、LinkedList
は同じ方法で制限されず、任意の量の要素を含めることができます。
実装に依存しますが、制限はList
インターフェイスによって定義されません。
ただし、インターフェイスはint
を返すsize()
メソッドを定義します。
このリスト内の要素の数を返します。このリストに含まれる要素が
Integer.MAX_VALUE
を超える場合、Integer.MAX_VALUE
を返します。
そのため、制限はありませんが、Integer.MAX_VALUE
に到達すると、リストの動作が変わりますa bit
ArrayList
(タグ付き)は配列によってサポートされ、配列のサイズに制限されます-Integer.MAX_VALUE
Java.util.Listに追加できるデータの量は、Java最大で?
これは HashMapに格納できるキー(オブジェクト)の数の理論上の制限? と非常に似ています。
_Java.util.List
_のドキュメントには、要素の最大数に関する制限が明示的に記載されていません。 _List.toArray
_ のドキュメントでは、...
このリスト内の要素のallを適切な順序(最初の要素から最後の要素まで)で含む配列を返します。次のような特定のメソッドを忠実に実装するのに問題があります。
...厳密に言えば、リストに2つ以上ある場合、このメソッドを忠実に実装することはできません。31-1 = 2147483647要素。これは可能な限り最大の配列だからです。
一部の人は、size()
...のドキュメントは.
このリスト内の要素の数を返します。このリストに_
Integer.MAX_VALUE
_を超える要素が含まれている場合、_Integer.MAX_VALUE
_を返します。
...上限がないことを示しますが、この見解は多くの矛盾をもたらします。 このバグレポート をご覧ください。
デフォルトサイズの配列リストはありますか?
ArrayList
を参照している場合、デフォルトのサイズは0であると言えます。ただし、デフォルトのcapacity(挿入できる要素の数、リストにメモリの再割り当てを強制する)は10です。 デフォルトコンストラクター のドキュメントを参照してください。
ArrayList
のサイズ制限は、通常の配列によってサポートされているため、_Integer.MAX_VALUE
_です。
Java.util.List
はインターフェースです。リストが保持できるデータの量は、使用することを選択したリストの特定の実装に依存します。
一般に、リストの実装は任意の数のアイテムを保持できます(インデックス付きリストを使用する場合、Integer.MAX_VALUE
または Long.MAX_VALUE
)。メモリが不足しない限り、リストは「フル」または何もなりません。
使用可能なメモリが許す限り。ヒープ以外のサイズ制限はありません。
ただし、インターフェイスは、intを返すsize()メソッドを定義します。
Returns the number of elements in this list. If this list contains more than Integer.MAX_VALUE elements, returns Integer.MAX_VALUE.
したがって、制限はありませんが、Integer.MAX_VALUEに達すると、リストの動作が少し変わります
ArrayList(タグ付き)は配列に連動しており、配列のサイズに制限されます-Integer.MAX_VALUE
Java配列内のアイテムの番号付けはゼロから開始する必要があります。これは、アイテムのInteger.MAX_VALUE + 1にアクセスできると思いました。
以下のarraylistのデフォルトコードを参照してください。ucreate List l = new ArrayList();の場合は10です。
public class ArrayList<E> extends AbstractList<E> implements List<E>,
Cloneable, Serializable, RandomAccess {
private static final long serialVersionUID = 8683452581122892189L;
private transient int firstIndex;
private transient int lastIndex;
private transient E[] array;
/**
* Constructs a new instance of {@code ArrayList} with ten capacity.
*/
public ArrayList() {
this(10);
}