ArrayListの中にコードの一部でそうあります
/ ** *バッファメモリ素子のArrayListのアレイ。ArrayListの容量はこの配列バッファの長さです。
あなたが最初の要素を追加する場合*、からelementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATAを持つ任意の空のArrayListはDEFAULT_CAPACITYに拡張されます。 * / 一時オブジェクト[]のからelementData; // 非入れ子になったクラスのプライベートアクセスが簡単にするために
elementDataは、現在のコレクションのすべての要素の配列を格納することですが、だった過渡過渡が配列のシリアライズに参加しないことを示している、キーワードの変更。
その場合は、要素の順序は、それを失うことはないのArrayListに保存されていますか?
この質問では、その後見下ろして、そして最終的にArrayListに、このような二つの方法を見つける のwriteObject()とreadObjectを()
/ ** *ストリームにArrayListのインスタンスの状態を保存し(すなわち、その配列)。* / プライベート 無効のwriteObject(java.io.ObjectOutputStreamのS)が スローにjava.io.IOException { // 書き込み素子数と隠蔽されている int型 expectedModCount = ModCount; s.defaultWriteObject(); //現在のクラスのすべてを書き出しますObjectOutputStreamの非静的フィールド(非静的)および非transientフィールド(非一時的) // にObjectOutputStreamに書き込まれたサイズ s.writeInt(サイズ); // 要素を追加する場合のArrayListは、スケーラブルであるため、よいです膨張は、この時点で空間を節約との時系列を減少させるためにいくつかの未使用スペースので、この方法は、そこになります ため(INT ; Iは<サイズ; I = 0 Iは++ ){ //配列に格納されたサイズが表します要素の数 s.writeObject(からelementData [I]); からelementDataを読み出す//要素がストリームに使用されている注文 } IF(ModCount =!expectedModCount){ スロー 新しい新しいConcurrentModificationExceptionが(); } }
/ ** * ArrayListのインスタンスが再構築ストリームから(すなわち、デシリアライズします)。 * / プライベート 無効のreadObject(java.io.ObjectInputStream S)が スローにjava.io.IOException、ClassNotFoundExceptionが{ のからelementData = ; EMPTY_ELEMENTDATA // 読み込みサイズ、およびすべての隠されたもの s.defaultReadObjectを(); // 読み込み容量 の。 readInt(); //は無視 IF(サイズ> 0 ){ // クローンとして()アレイのサイズではなく、容量に応じて割り当てられたように、 ensureCapacityInternal(サイズ); []オブジェクト = のからelementDataを; //は正しい順序を読み取りますすべての要素に。 以下のために(int型 i = 0; iが大き<; Iは++ ){ [I] = s.readObject()。 } } }