嘿我正在为学生的详细信息做一个商店,我想要一些关于使用哪个系列的意见。商店将提供姓名,号码,地址和电子邮件等详细信息。然后将商店打印到文本文件,我可以在其中加载,保存,编辑和删除文本文件中的详细信息。我以前从未这样做过,如果在使用集合时对文件I / O有任何限制,我也不会这样做。所以我非常感谢这些评论。提前谢谢。
答案 0 :(得分:4)
如果我在你的位置,
然后我会创建一个 bean类说Student
和集合 ArrayList<Student> student = new ArrayList<Student>();
,而ArrayList
是序列化所以没有磁盘写入问题,class
操作 IO
。
排序 ArrayList
对象属性 look
答案 1 :(得分:3)
除非需要一些特殊的“快速定位”功能,例如按姓氏或学生ID搜索,否则列表将是适当的集合。
List<Student> students = new ArrayList<Student>();
如果您确实需要根据学生ID的某些属性来组织学生,请考虑使用LinkedHashMap
:
Map<String,Student> studentById = new LinkedHashMap<String,Student>();
LinkedHashMap
为您提供可预测的迭代顺序。您可以使用常规HashMap<K,V>
,但迭代的顺序将是任意的。最后,您可以使用TreeMap<K,V>
,它将基于键的排序迭代顺序。
答案 2 :(得分:1)
如果它必须是可序列化的,即意味着你可以将其写入磁盘,那么你可以使用List
。现在,在任何人尖叫之前,您无法序列化正确的List
,但您也无法实例化List
。由于我们知道List
的所有已知子类都是可序列化的,因此您可以安全地进行转换。关于如何存储数据List<Student>
应该没问题。
编辑
这里似乎有些混乱。在面向对象语言中,我们知道is-a
关系适用于层次结构中指定的对象。因此,在Java API中,我们有一个名为List
的接口,该接口具有实现它的类ArrayList
。这会将ArrayList
置于List
的层次结构中。由于ArrayList
实现Serializable
,我们知道您无法实例化标记有关键字接口的对象(在Java中)。我们可以使用强制转换为Serialize
List
的任何已知实现。这将起作用的原因是传递的实现(即具体对象)保证是可序列化的。
答案 3 :(得分:0)
在最简单的情况下,java.util.List
将完全按照您的意愿行事。但是,如果您希望能够快速查找集合中的条目(以支持您的更新要求),您还应该查看java.util.Map
。 Map允许您快速导航到特定记录而无需遍历整个集合,而使用List,您必须依次查看集合中的每个学生,直到找到您感兴趣的那个。