如何通过java中的值按递减顺序在字典中存储值?

时间:2013-10-13 12:35:27

标签: java collections dictionary

我有问题。实际上我正在研究一些代码并且代码是用python编写的,但是我想在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}

但这不是我想要的输出,就像python给出的那样:

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

任何人都能给我一些想法吗?

1 个答案:

答案 0 :(得分:2)

请勿使用HashTable,这是已废弃的藏品之一

我不确定您要维护的订单,但有许多不同的Map类型。 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,这两个都被1998年Java 1.2的发布淘汰了,我建议你阅读Java Collections API ,特别是关于Maps,但阅读整本书不会受到伤害。