2011-05-24 72 views
2

假設我從命令行輸入了一個字符串,並且希望通過使用Hashtable在字符串中找到重複和唯一的條目。如何使用Hashtable查找重複且唯一的字符串條目

如:

I/P:

喜你好再見喜好你好名喜天喜

O/P:

獨特的元素是:再見了,好,姓名,天

重複的元素是:

喜3次

hello 2次

回答

7

您可以通過輸入字符串調用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而非HashtableHashMap不是線程安全的,但速度更快。 Hashtable有點慢,但線程安全。如果您嘗試在單個線程中執行此操作,我會建議HashMap

+1

構造爲保持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

+0

碰撞怎麼辦?說「嗨」和「再見」哈希到相同的價值,那麼什麼? – yelsayed 2013-03-26 15:41:00

+0

@Yasser A'Hashtable'不使用散列值作爲鍵,它使用散列值來選擇將包含正確鍵的存儲區。因此,在同一個「桶」中可以找到兩個散列爲相同值的「String」,但要完成查找,您必須將該鍵與桶中的所有值(可能)進行比較以找到您的鍵。那有意義嗎? – 2013-03-26 15:51:05

2

使用散列表作爲鍵和數字類型作爲計數器。

檢查所有單詞,如果它們不在地圖中,則插入它們;否則增加計數(散列表的數據部分)。

心連心

馬里奧

0

你可以將每個字符串轉換爲一個整數。然後,使用生成的整數作爲散列值。若要將字符串轉換爲int,可以將其視爲基本256數字,然後將其轉換爲

相關問題