嘿,我正在为学生详细信息创建一个商店,我想就使用哪个系列提出一些意见。商店将有详细信息,例如名称、号码、地址和电子邮件。然后商店将被打印到一个文本文件中,我可以在其中加载、保存、编辑和删除文本文件中的详细信息。我以前从未这样做过,如果在使用集合时对文件 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,但您也无法实例化 a List
。由于我们知道所有已知的子类List
都是可序列化的,因此您可以安全地进行转换。在如何存储数据方面List<Student>
应该没问题。
编辑
这里似乎有些混乱。在面向对象的语言中,我们知道这种is-a
关系适用于层次结构中指定的对象。因此,在 Java API 中,我们有一个称为该接口的接口,例如List
,该接口具有实现它的类。ArrayList
这放入ArrayList
了 的层次结构List
。由于ArrayList
implementsSerializable
我们知道你不能实例化一个用关键字 interface 标记的对象(在 Java 中)。我们可以对Serialize
任何已知的实现使用强制转换List
。这会起作用的原因是传递的实现(即具体对象)保证是可序列化的。
在最简单的情况下, ajava.util.List
将完全按照您的意愿行事。但是,如果您希望能够快速找到集合中的条目(以支持您的更新要求),您还应该查看java.util.Map
. Map 允许您快速导航到特定记录,而无需遍历整个集合,而使用 List,您必须依次查看集合中的每个学生,直到找到您感兴趣的那个。