2017-02-15 9 views
1

私は2つのHashMapを持っていますが、できるだけ早く比較したいのですが、問題はmapAの文字列がスペースで接続された2つの単語で構成されていることです。 mapBのStringは1つの単語だけです。私はそれがすでに行われている、出現箇所をカウントしたくない異なる文字列キーでハッシュマップを比較する

は、私はMAPAの最初のキーは「こんにちは」キーとキー「世界」を見つける必要があり

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 

2つのdiferentの文字列を比較したいですfrom mapB

私がしようとしているのは、長いテキストを解析してCo occurencesを見つけ、すべての単語に関連して発生する頻度を設定することです。

私の最初の試み:

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

"2つの異なる文字列を比較したい"とは? –

答えて

0

あなたが反復処理はならないHashMap(O(n))は、あなただけの特定のキーを見つけようとしているならば、それは何HashMapのルックアップ(O(1) )が使用されます。だからあなたの内側のループを削除します。

コード内の不要な変数を削除することもできます(例:keytokenkey)。 3番目のtokensマップは必要ありません。トークン値を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