こんにちは、学生の詳細のストアを作成していて、どのコレクションを使用するかについて意見を求めていました。ストアには、名前、番号、住所、電子メールなどの詳細が表示されます。ストアはテキスト ファイルに出力され、テキスト ファイルの詳細を読み込み、保存、編集、削除できます。コレクションを使用するときにファイル I/O に制限がある場合は、これを行ったことはありません。ですから、コメントをいただければ幸いです。前もって感謝します。
4 に答える
もし私があなたの所にいたら、
次に、コレクション用のBeanクラスを作成し、シリアル化されているため、ディスク書き込みとすべての操作に問題はありません。Student
ArrayList<Student> student = new ArrayList<Student>();
ArrayList
class
IO
オブジェクト プロパティの外観による並べ替え 用ArrayList
姓や学生 ID による検索など、特別な「迅速な場所」機能が必要でない限り、リストは適切なコレクションとして使用できます。
List<Student> students = new ArrayList<Student>();
何らかの属性、たとえば学生 ID で学生を整理する必要がある場合は、次の使用を検討してLinkedHashMap
ください。
Map<String,Student> studentById = new LinkedHashMap<String,Student>();
LinkedHashMap
予測可能な反復順序を提供します。通常HashMap<K,V>
の を使用できますが、反復の順序は任意です。最後に、 a を使用できますTreeMap<K,V>
。これは、キーの順序に基づいて反復の順序を決定します。
シリアル化可能である必要がある場合、つまりディスクに書き込むことができる場合は、List
. 誰かが悲鳴を上げる前にList
、正しい a をシリアル化することはできませんが、どちらかをインスタンス化することもできませんList
。の既知のサブクラスはすべてシリアル化可能であることがわかっているため、List
安全にキャストできます。データの保存方法に関しては、問題ありList<Student>
ません。
編集
ここで混乱が生じているようです。is-a
オブジェクト指向言語では、階層で指定されたオブジェクトに対して関係が成り立つことがわかっています。したがって、Java API には、List
このインターフェイスと呼ばれるインターフェイスがあり、たとえばそれを実装するクラスがありArrayList
ます。これはArrayList
の階層に入れますList
。ArrayList
が実装されているためSerializable
、キーワード interface でマークされたオブジェクトを (Java で) インスタンス化できないことがわかっています。Serialize
の既知の実装へのキャストを使用できますList
。これが機能する理由は、渡される実装 (具体的なオブジェクト) がシリアライズ可能であることが保証されているためです。
In the simplest case a java.util.List
will do exactly what you want. However, if you want to be able to find entries in the collection quickly ( to support your update requirements ), you should also probably look at java.util.Map
. Map allows you to navigate quickly to a particular record without having to iterate over the entire collection, whereas with a List you'd have to look at every student in the collection in turn until you find the one you are interested in.