-1

我有问题。实际上我正在处理一些代码,并且该代码是用 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})

谁能给我一些想法?

4

1 回答 1

2

不要使用 a HashTable,这是过时的集合之一

我不确定您要维护的顺序,但有许多不同的Map类型。AHashTable等价于 aHashMap但 is issyncronized是一种稍微无用的方式。

让我们来看看选项:

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

这将创建 a HashMap,就像 a 一样HashTable不保证迭代的顺序。

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

ALinkedHashMap与 a 类似,HashMap只是它维护了一个元素的双向链表,因此元素的迭代顺序就是插入顺序。

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

ATreeMap是两种基于散列的地图的非常不同的野兽。将TreeMap其元素存储在Tree提供的O(1)查找和O(lg n)放置中 - 因此速度较慢。但是,始终保持其所有TreeMap元素排序。默认构造函数按元素的自然顺序对元素进行排序,因此元素必须并且将使用它对元素进行排序。implements ComparableTreeMap

鉴于您正在尝试使用 aDictionary和 a HashTable,这两者都被 1998 年 Java 1.2 的发布淘汰了,我建议您阅读Java Collections API,特别是关于Maps的内容,但阅读全部内容不会受到伤害。

于 2013-10-13T12:45:42.537 回答