【发布时间】:2011-08-31 15:18:42
【问题描述】:
假设我正在从命令行输入一个字符串,并且我想使用 Hashtable 在字符串中查找重复且唯一的条目。
例如:
我/p:
你好你好再见你好你好名字你好你好
o/p:
独特的元素是:再见、好、名字、日子
重复的元素是:
嗨 3 次
你好两次
【问题讨论】:
标签: java collections hashtable
假设我正在从命令行输入一个字符串,并且我想使用 Hashtable 在字符串中查找重复且唯一的条目。
例如:
我/p:
你好你好再见你好你好名字你好你好
o/p:
独特的元素是:再见、好、名字、日子
重复的元素是:
嗨 3 次
你好两次
【问题讨论】:
标签: java collections hashtable
您可以通过在输入字符串上调用split(" ") 来拆分输入。这将返回代表每个单词的 String[]。遍历这个数组,并使用每个字符串作为 Hashtable 的键,值是一个整数。每次遇到一个单词时,要么增加它的值,要么如果当前没有值,则将值设置为 0。
Hashtable<String, Integer> hashtable = new Hashtable<String, Integer>();
String[] splitInput = input.split(" ");
for(String inputToken : splitInput) {
Integer val = hashtable.get(inputToken);
if(val == null) {
val = new Integer(0);
}
++val;
hashtable.put(inputToken, val);
}
另外,您可能想要查看HashMap 而不是Hashtable。 HashMap 不是线程安全的,但速度更快。 Hashtable 有点慢,但是是线程安全的。如果您尝试在单个线程中执行此操作,我建议您使用HashMap。
【讨论】:
Hashtable 不使用散列值作为键,它使用散列值来选择包含正确键的存储桶。因此,两个String 将在同一个“桶”中找到哈希到相同值的两个String,但要完成查找,您必须将密钥与桶中的所有值进行比较(可能)以找到您的钥匙。这有意义吗?
使用以字符串为键、以数字类型为计数器的哈希表。
遍历所有单词,如果它们不在地图中,则插入它们;否则增加计数(哈希表的数据部分)。
第
马里奥
【讨论】:
您可以将每个字符串转换为整数。然后,使用生成的整数作为哈希值。要将string转换为int,可以将其视为base 256数字,然后进行转换
【讨论】: