2017-02-15 3 views
1

Ich habe zwei HashMaps und möchte es so schnell wie möglich vergleichen, aber das Problem ist, der String von mapA besteht aus zwei Wörtern, die mit einem Leerzeichen verbunden sind. Die Zeichenfolge von mapB ist nur ein Wort.Vergleichen von Hashmaps mit verschiedenen String Keys

Ich möchte nicht die Vorkommen zählen, ist bereits getan, ich will die beiden diferent Strings vergleichen

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 

der erste Schlüssel von MAPA sollte die Taste „Hallo“ und Taste „Welt“ finden von mapB

was ich versuche zu tun ist, einen langen Text zu analysieren, um Co Vorkommen zu finden und einen Wert zu setzen, wie oft sie auftreten, bezogen auf alle Wörter.

mein erster Versuch:

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

Definieren Sie wieder "vergleichen". Ihre Frage sollte die Signatur und den Rückgabetyp sowie das Javadoc der Methode enthalten, die Sie implementieren möchten. Deine Beschreibung ist viel zu vage. –

+0

Aber was genau ist die Frage? – davidxxx

+0

"Ich möchte die zwei verschiedenen Strings vergleichen" wie? –

Antwort

0

Sie sollten nicht iterieren ein HashMap (O (n)), wenn Sie nur versuchen, einen bestimmten Schlüssel zu finden, das ist, was die HashMap Lookup (O (1)) wird für verwendet. Also eliminiere deine innere Schleife.

Sie können auch einige unnötige Variablen in Ihrem Code entfernen (z. B. key, tokenkey). Sie benötigen auch keine dritte Karte tokens, Sie können die Token-Werte in mapb setzen.

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

danke mate :-) – Koche

Verwandte Themen