2013-10-13 68 views
-1

我有問題。其實我正在研究一些代碼,並且代碼是用python編寫的,但是我想在java中做同樣的問題。我得到了一切,但收集了一些問題即將到來。如何通過java中的值以遞減順序在字典中存儲值?

我在字典中的Java存儲值:

Dictionary<String, Integer> dc=new Hashtable<String, Integer>(); 
    String s[]={"red", "blue", "red", "green", "blue", "blue"}; 
    for(String t: s){ 

     if(dc.get(t)==null) 

      dc.put(t, 1); 
    else 
      dc.put(t, dc.get(t)+1); 
} 

輸出:

{blue=3, green=1, red=2} 

我要像:

{blue=3, red=2, green=1} 

但這不是我想要的輸出我想像蟒蛇給:

cnt = Counter() 
>>> for word in ['red', 'blue', 'red', 'green', 'blue', 'blue']: 
...  cnt[word] += 1 
>>> cnt 
Counter({'blue': 3, 'red': 2, 'green': 1}) 

任何一個可以給我一些想法?

+0

我不認爲字典維護秩序。 – thefourtheye

+0

可能是SortedList或SortedDictionary。然而,一個列表或一個數組可以做到這一點,只需按照你想要的順序填充它即可。 –

回答

2

請勿使用HashTable,這是已過時的系列之一。

我不確定您想要維護的訂單,但有許多不同的Map類型。 A HashTable相當於HashMap,但是是syncronized是一個稍微沒有用的方式。

讓經過的選項:

final Map<String, Integer> m = new HashMap<>()

這將創建一個HashMap其中,像一個HashTable,提供不保證關於迭代的順序。

final Map<String, Integer> m = new LinkedHashMap<>()

LinkedHashMap類似於HashMap除了它保持的元件的雙向鏈表,使得元件的迭代順序是插入順序的事實。

final Map<String, Integer> m = new TreeMap<>()

TreeMap是一種非常不同的野獸既基於散列的地圖。 TreeMap將其元素存儲在Tree中,提供O(1)查找和O(lg n)放入 - 因此速度較慢。但是,TreeMap始終將的所有元素排序在的所有時間。默認構造函數按照它們的自然順序對元素進行排序,因此元素必須爲implements Comparable,而TreeMap將使用該元素對元素進行排序。

既然你要使用一個DictionaryHashTable,這兩者都是由Java 1.2的1998年的版本已過時的,我建議你閱讀有關Java Collections API,特別是約Maps但看完一大堆贏得」不受傷害。

+0

我知道'collection api',但是如何做這個命令。 –