2012-08-02 44 views
5

嗨即時製作商店的學生的詳細信息,我想一些意見,哪些收藏使用。該商店將具有諸如姓名,號碼,地址和電子郵件等詳細信息。商店將被打印到一個文本文件,我可以加載,保存,編輯和刪除文本文件中的細節。我從來沒有這樣做過,如果在使用集合時對文件I/O有任何限制,我也不會。所以我會很感激評論。提前致謝。最好的收藏品來存儲學生的細節?

回答

4

如果我是你的地方,

那我就已經創建了一個bean類Student收集ArrayList<Student> student = new ArrayList<Student>();ArrayList系列化所以沒有磁盤寫入和發行所有IO一個class操作

對於排序ArrayList通過對象屬性look

+0

只看到你的帖子現在的男人。數組列表可以按名稱排序。它不是在簡短的問,但即時通訊認爲這可能是一個獎金,有一個排序的文本文件。 – Pendo826 2012-08-02 13:46:05

+1

@ Pendo826 here http://stackoverflow.com/questions/2784514/sort-arraylist-of-custom-objects-by-property – 2012-08-02 13:49:39

+0

很好的例子。 :) – Pendo826 2012-08-02 13:53:28

3

除非需要某些特殊的「快速位置」功能,例如按姓氏或學生ID進行搜索,則列表將是適當的集合。

List<Student> students = new ArrayList<Student>(); 

如果你確實需要一些屬性來組織你的學生,比如說,通過學生證,可以考慮使用LinkedHashMap

Map<String,Student> studentById = new LinkedHashMap<String,Student>(); 

LinkedHashMap給你迭代的可預知的順序。您可以使用常規的HashMap<K,V>,但迭代順序將是任意的。最後,你可以使用一個TreeMap<K,V>,它將基於密鑰排序的迭代次序。

+0

我認爲這將導致地圖的情況下一個嚴重的問題,如果他不正確重載equals /哈希碼。 – Woot4Moo 2012-08-02 13:30:50

+0

@ Woot4Moo這是正確的,如果OP使用他自己的類來處理key,他將需要處理equals/hashCode。這就是爲什麼我建議使用'字符串' - 他們做出優秀的散列鍵。 – dasblinkenlight 2012-08-02 13:34:23

+0

嗯,他們做出很好的密鑰,因爲哈希值得保證很好。 http://www.infoq.com/presentations/effective-api-design/查看Josh Bloch對Strings作爲Keys的看法。這是建立API的相當豐富 – Woot4Moo 2012-08-02 13:39:45

1

那麼如果它必須是可序列化的,也就是說你可以將它寫入磁盤,那麼可以使用List。現在,在任何人尖叫之前,您無法序列化一個List,這是正確的,但您也無法實例化List。由於我們知道List的所有已知子類都是可序列化的,因此您可以安全地投射。在如何存儲數據List<Student>應該就好了。

編輯

似乎在這裏有些混亂。在面向對象的語言中,我們知道is-a關係適用於層次結構中指定的對象。因此,在Java API中,我們有一個名爲List的接口,該接口具有實現它的類ArrayList。這使ArrayList處於List的層次結構中。由於ArrayList實現了Serializable,我們知道您不能實例化標有關鍵字接口(Java)的對象。我們可以使用Serialize來鑄造List的任何已知實現。這將起作用的原因是保證傳遞的實現(即具體對象)是可序列化的。

+0

好,所以你不能序列化一個列表。那麼,如果我使用列表,我會在保存和加載商店時遇到問題嗎? – Pendo826 2012-08-02 13:47:48

+1

@ Pendo826 no。你甚至不能創建一個'List',你可以創建一個'ArrayList',它實現Serializable(默認情況下是API),它是''List''。這是作業,所以我不會直接給出實施。但這是面嚮對象語言的基石之一。 – Woot4Moo 2012-08-02 13:50:44

0

在最簡單的情況下,java.util.List將完全符合您的要求。但是,如果您希望能夠快速查找集合中的條目(以支持您的更新要求),則還應該查看java.util.Map。地圖可讓您快速導航到特定記錄,而不必遍歷整個集合,而使用列表時,您必須依次查看集合中的每個學生,直到找到您感興趣的一個。

+0

除非它們被排序。 – Daniel 2012-08-02 13:29:37