我有问题。实际上我正在研究一些代码并且代码是用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})
任何人都能给我一些想法吗?
答案 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
将使用它来对元素进行排序。
鉴于你试图使用Dictionary
和HashTable
,这两个都被1998年Java 1.2的发布淘汰了,我建议你阅读Java Collections API ,特别是关于Maps,但阅读整本书不会受到伤害。