2012-02-04 40 views
1

我的問題是這樣的,當我得到一個數據,我把它存儲在一個數據結構中,並保留一個counter.If類似的東西,然後通過在數據結構中搜索它,如果類似的東西已經存在,那麼只需增加計數器並且我的數據沒有限制。數據有時可能會非常大。因此,作爲java的初學者,我想知道哪個數據結構對我的問題是好的/有效的。哪個是我的應用程序的最佳Java數據結構?

回答

3

你想要一個HashMap,無論你的「數據」作爲關鍵字,還是一個計數器作爲值。

http://docs.oracle.com/javase/1.4.2/docs/api/java/util/HashMap.html

這是一個不錯的選擇的原因是因爲它有O(1)「包含了」檢查,檢索和插入時間。只要你不需要排序你的數據,這是一個很好的選擇。

這個未經測試的代碼應該讓你開始。將String替換爲您的數據類型。如果是自定義類,則必須重載hashCode()equals()

HashMap<String, Integer> map = new HashMap<String, Integer>(); 

... 

Integer i = map.get(data); 
if(i == null) { 
    map.put(data, 1); 
} else { 
    map.put(data, i + 1); 
} 
1

聽起來像你需要使用HashMap<YourClass, Integer>link)。

值是計數器,這就是爲什麼它是整數。 當出現問題時,您檢查是否存在具有該密鑰的項目。如果不是,則添加它(值爲1),否則將其添加爲值1加上以前的值。

您可以優化,而不是整數使您的值是一個自定義類,其中包裝一個整數,並允許增加。這樣你每次增加時都不必插入散列圖。

+0

很酷的優化;從來沒有想到這一點。 +1 – 2012-02-04 11:14:35

相關問題