web-dev-qa-db-ja.com

リストは最大でどれくらいのデータを保持できますか?

Java.util.ListでJava最大で追加できるデータの量は?

ArrayListのデフォルトサイズはありますか?

52
Paul

List実装に依存します。 intsを使用して配列のインデックスを作成するため、ArrayListInteger.MAX_VALUE要素。ただし、LinkedListは同じ方法で制限されず、任意の量の要素を含めることができます。

50
gustafc

実装に依存しますが、制限はListインターフェイスによって定義されません。

ただし、インターフェイスはintを返すsize()メソッドを定義します。

このリスト内の要素の数を返します。このリストに含まれる要素がInteger.MAX_VALUEを超える場合、Integer.MAX_VALUEを返します。

そのため、制限はありませんが、Integer.MAX_VALUEに到達すると、リストの動作が変わりますa bit

ArrayList(タグ付き)は配列によってサポートされ、配列のサイズに制限されます-Integer.MAX_VALUE

22
Bozho

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_です。

12
aioobe

Java.util.Listはインターフェースです。リストが保持できるデータの量は、使用することを選択したリストの特定の実装に依存します。

一般に、リストの実装は任意の数のアイテムを保持できます(インデックス付きリストを使用する場合、Integer.MAX_VALUE または Long.MAX_VALUE)。メモリが不足しない限り、リストは「フル」または何もなりません。

9
Gerco Dries

使用可能なメモリが許す限り。ヒープ以外のサイズ制限はありません。

5
duffymo

ただし、インターフェイスは、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

2
Mohammad

Java配列内のアイテムの番号付けはゼロから開始する必要があります。これは、アイテムのInteger.MAX_VALUE + 1にアクセスできると思いました。

0
Oleksy Ostanin

以下の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);
          }
0
Dead Programmer