現在、テキスト ファイルからデータ (段落/文字列) のチャンクをかき集めて、新しいファイルに書き込んでいます。ただし、後でいくつかの条件を追加することを計画しているため、このデータのチャンクを取り出して一時配列にのみ保存し、条件が満たされた場合にファイルに書き出すことができるようにしたいと考えています。ただし、事前に配列のサイズを知らずにこれを配列に書き込む方法がわかりません。
誰にもアイデアはありますか?
現在、テキスト ファイルからデータ (段落/文字列) のチャンクをかき集めて、新しいファイルに書き込んでいます。ただし、後でいくつかの条件を追加することを計画しているため、このデータのチャンクを取り出して一時配列にのみ保存し、条件が満たされた場合にファイルに書き出すことができるようにしたいと考えています。ただし、事前に配列のサイズを知らずにこれを配列に書き込む方法がわかりません。
誰にもアイデアはありますか?
配列を使用しないでください。たとえば、 ArrayListなど、動的に拡張できる String 型のコレクションを使用します。簡単なコード サンプルを次に示します:サンプル 1、サンプル 2
Java ドキュメントからの ArrayList のメモリ管理に関するメモ:
容量は、リスト内の要素を格納するために使用される配列のサイズです。常に少なくともリスト サイズと同じ大きさです。要素が ArrayList に追加されると、その容量は自動的に増加します。成長ポリシーの詳細は、要素の追加には一定の償却時間コストがあるという事実以外は指定されていません。
アプリケーションは、ensureCapacity 操作を使用して多数の要素を追加する前に、ArrayList インスタンスの容量を増やすことができます。これにより、増分再割り当ての量が減る場合があります。
ドキュメントでさえ、物事が内部でどのように管理されているかを正確に指定していないことに注意してください。
Java では、ArrayList
(または他のタイプの Java コレクション) がすべてのメモリ管理を処理できます。
ArrayList<String> strings = new ArrayList<String>();
文字列を追加する場合:
strings.add("New String");
特定のインデックス (この例ではインデックス 1) で文字列を取得する場合:
strings.get(1);
ArrayListクラスにはさらに多くのメソッドがあります。
動的に成長するコレクションが必要です。ArrayList
頭に浮かぶのは最初です。内部的には通常の配列と非常に似ているため、必要に応じて高速なランダム アクセスを提供します。LinkedList
最終的に必要になる要素の数を見積もっていない場合は、その要素へのシーケンシャル アクセスのみが必要な場合に適している可能性があります (ランダム アクセスは利用できますが、高速ではありません)。