2017-02-15 54 views
1

我有兩個哈希地圖,並希望儘可能快地比較它,但問題是,mapA的字符串由兩個字與空間連接組成。 mapB的字符串只有一個字。通過不同的字符串鍵比較哈希表

我不想算OCCURENCES,即已經完成,我想比較兩個diferent字符串

mapA: 
key: hello world, value: 10 
key: earth hi, value: 20 

mapB: 
key: hello, value: 5 
key: world, value: 15 
key: earth, value: 25 
key: hi, value: 35 

地圖的第一個關鍵應該找到鑰匙「你好」和密鑰「世界」從地圖B

我想要做的是解析一個長文本,以找到合併出現並設置一個值,它們出現的頻率與所有單詞相關。

我第一次嘗試:

for(String entry : mapA.keySet()) 
    { 
String key = (String) entry; 
     Integer mapAvalue = (Integer) mapA.get(entry); 
     Integer tokenVal1=0, tokenVal2=0; 
     String token1=key.substring(0, key.indexOf(" ")); 
     String  token2=key.substring(key.indexOf(" "),key.length()).trim(); 
     for(String mapBentry : mapb.keySet()) 
     { 
      String tokenkey = mapBentry; 
      if(tokenkey.equals(token1)){ 
       tokenVal1=(Integer)tokens.get(tokenentry); 
      } 
      if(tokenkey.equals(token2)){ 
       tokenVal2=(Integer)tokens.get(tokenentry); 
      } 
      if(token1!=null && token2!=null && tokenVal1>1000 && tokenVal2>1000){ 

       **procedurecall(mapAvalue, token1, token2, tokenVal1, tokenVal2);** 


      } 
     } 


    } 
+0

再次,定義「比較」。你的問題應該提供你試圖實現的方法的簽名和返回類型以及javadoc。你的描述太含糊。 –

+0

但是究竟是什麼問題? – davidxxx

+0

「我想比較兩個不同的字符串」如何? –

回答

0

你不應該遍歷一個HashMap(O(n))的,如果你只是想找到一個特定的關鍵,這是什麼HashMap查找(O(1) ) 是用來。所以消除你的內在循環。

此外,您可以消除代碼中的一些不必要的變量(例如key,tokenkey)。您也不需要第三張tokens地圖,您可以將token值設置爲mapb

for(String entry : mapA.keySet()) 
{ 
    Integer mapAvalue = (Integer) mapA.get(entry); 
    String token1=entry.substring(0, entry.indexOf(" ")); 
    String token2=entry.substring(entry.indexOf(" "),entry.length()).trim(); 

    if(mapb.containsKey(token1) && mapb.containskey(token2)) 
    { 
     // look up the tokens: 
     Integer tokenVal1=(Integer)mapb.get(token1); 
     Integer tokenVal2=(Integer)mapb.get(token2); 

     if(tokenVal1>1000 && tokenVal2>1000) 
     { 
      **procedurecall(mapAvalue, token1, token2, tokenVal1, tokenVal2);** 
     } 
    } 
+0

謝謝mate :-) – Koche