2011-11-18 293 views
2

我正在學習Java並且有一個非常基本的問題。如何創建一萬個對象並將其存儲在一個HashMap中

我使用BufferedReader爲一些網站編制索引並將數據存儲在基於MySQL的數據庫中。我每15秒就爲30個數據源執行此操作,這會生成大量數據。

現在我想分析這些數據。我正在考慮將數據同時存儲在HashMap中,我將在每天結束時清除這些數據。

但是,你能給我一個關於如何爲30個不同來源創建對象的例子嗎? 我需要30個不同的HashMap或者我可以建立一個如'pathName + randomNumber'的密鑰嗎?

最後,我希望能夠找到每個來源和兩個最新條目的HashMap中的第一個條目,從而使我能夠看到這三者之間的區別是什麼。

請幫忙。我試圖在網上看,但沒有運氣,因爲我認爲HashMap的例子總是專注於存儲對象,而不是如何創建你存儲在它們中的對象......(是的,我知道 - 這是一個菜鳥問題) ;)

+2

「找到第一個條目」,「最新的兩個條目」。什麼定義了這個命令?插入時間? – Thilo

+1

您必須設計一個可以(或不)使用JCF類的自定義,精細調整的數據結構。例如,您可以創建一個Map,其中鍵爲源,值爲LinkedList,您可以在其中列出與該特定源相關的條目。但是你必須關注你對這些數據的處理方式:你沒有給我們足夠的信息。是否完全分類相關,或者你只需​​要知道第一個和最後兩個? O(1)檢索至關重要嗎?爲什麼和如何?更多:「如何創建對象」意味着什麼。在java中,你通過new'ing創建對象。你的意思是什麼? – gd1

+1

如果您想要一個有序集合(基於插入順序),請使用LinkedHashMap。如果你想要一個有排序的地圖,那麼使用TreeMap並在對象上實現Comparable或使用比較器。另外,你可以詳細解釋一下這個問題,因爲你沒有說你使用的是什麼類型的對象,也不知道這個過程是否必須作爲一個整體涉及30個子問題,或者你可以一個接一個地處理這些問題。 –

回答

1

作業,我會盡量按照你的建議。所以在某種意義上你已經回答了你的問題。 :)每當我有類似的情況,並且必須使用Map時,我使用正斜槓來形成對象的層次結構。所以,假設你想要區分來自30個來源的數據。 - 給這些來源一個獨特的名稱,並使用這種簡單的模式形成您的地圖鍵:「/<root>/<source id>/<data id>」。在某些網站上存儲鏈接的示例:mymap.put("/myproject/www.example.com/link-0121", "http://www.kernel.org");

如果由於某種原因想要獲取所有具有等於「/myproject/www.example.com」的鍵的Map條目,那麼我建議您僅將List對象列表到您的映射!下面是該案例的僞代碼:

ArrayList lst = new ArrayList(); 
lst.add("http://www.kernel.org"); 
mymap.put("/myproject/www.example.com", lst); // www.example.com has a link to www.kernel.org 

只有當您的數據可以由數字唯一標識時,此方法纔有效。然後,您只需使用List的get()方法,其索引作爲參數。但是,如果您需要具有數據的字符串鍵,恐怕您需要製作Map of Map(即使用HashMap而不是ArrayList)。

+0

嗨Dejan!謝謝!!現在我知道如何處理密鑰;)但是我真正的問題仍然是,我不知道如何在地圖中存儲對象。作爲一個例子,我想存儲以下變量:articleLength,artTitle,artDate等。如何創建這個對象並將其存儲在上述層次中?然後,我想創建一個新的方法,可以將新的信息添加到地圖中;例如從第一天開始輸入articleLength和最後兩個輸入並對它們進行比較。然後分析文章更長的差異,因此我在最新的一行中添加「更長」。你能幫我嗎? – Jobu

+0

我有數據,我只需要知道如何將其添加到對象 - 然後將其存儲在地圖中。他們需要不同的對象名稱或...是的,這是一個新手問題,我知道:)但我不知道... – Jobu

+0

只需爲他們創建一個類。像這樣:'公共類MyData {公開長度;公共字符串標題;公開日期日期; }'然後,而不是一個字符串,你會把MyData對象放到你的List或Map中。 :) – DejanLekic

2

一種可能性是在包含數據對象的路徑名中使用Map。這將允許您按照您插入的順序檢索它們。

而不是List您還可以將來自Long(取數的時間戳)的Map存儲到您的數據對象。

什麼是最好的方法取決於你想如何使用數據結構。

0

聲明一個地圖,其具有String作爲(源)和List<String>作爲其(網頁數據)。

Map<String, List<String>> map; 
相關問題