假設我從命令行輸入了一個字符串,並且希望通過使用Hashtable在字符串中找到重複和唯一的條目。如何使用Hashtable查找重複且唯一的字符串條目
如:
I/P:
喜你好再見喜好你好名喜天喜
O/P:
獨特的元素是:再見了,好,姓名,天
重複的元素是:
喜3次
hello 2次
假設我從命令行輸入了一個字符串,並且希望通過使用Hashtable在字符串中找到重複和唯一的條目。如何使用Hashtable查找重複且唯一的字符串條目
如:
I/P:
喜你好再見喜好你好名喜天喜
O/P:
獨特的元素是:再見了,好,姓名,天
重複的元素是:
喜3次
hello 2次
您可以通過輸入字符串調用split(" ")
打散輸入。這將返回一個表示每個單詞的String []。迭代此數組,並將每個String用作Hashtable中的鍵,值爲Integer。每遇到一個單詞,就增加其值,或者如果當前沒有值,則將該值設置爲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
。
使用散列表作爲鍵和數字類型作爲計數器。
檢查所有單詞,如果它們不在地圖中,則插入它們;否則增加計數(散列表的數據部分)。
心連心
馬里奧
你可以將每個字符串轉換爲一個整數。然後,使用生成的整數作爲散列值。若要將字符串轉換爲int,可以將其視爲基本256數字,然後將其轉換爲
構造爲保持count的Map在Apache Commons Collections API中也稱爲「Bag」。 http://commons.apache.org/collections/apidocs/org/apache/commons/collections/Bag.html Guava稱它爲「MultiSet」http://guava-libraries.googlecode.com/svn/tags/release09/ javadoc/com/google/common/collect/Multiset.html –
2011-05-24 05:07:08
碰撞怎麼辦?說「嗨」和「再見」哈希到相同的價值,那麼什麼? – yelsayed 2013-03-26 15:41:00
@Yasser A'Hashtable'不使用散列值作爲鍵,它使用散列值來選擇將包含正確鍵的存儲區。因此,在同一個「桶」中可以找到兩個散列爲相同值的「String」,但要完成查找,您必須將該鍵與桶中的所有值(可能)進行比較以找到您的鍵。那有意義嗎? – 2013-03-26 15:51:05