2017-02-15 21 views
1

У меня есть два HashMaps и вы хотите сравнить их как можно быстрее, но проблема в том, что строка MapA состоит из двух слов, связанных с пространством. Строка mapB - это всего лишь одно слово.Сравнение хэш-карт по различным строковым ключам

Я не хочу считать вхождений, что уже сделано, я хочу, чтобы сравнить два 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 

первый ключ MAPA должен найти ключ «привет» и клавишу «мир» from mapB

то, что я пытаюсь сделать, это синтаксический анализ длинного текста, чтобы найти вхождения Co и установить значение, как часто они происходят, связанные со всеми словами.

моя первая попытка:

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 (п)), если вы просто пытаетесь найти конкретный ключ, это то, что HashMap поиска (O (1)) используется для. Поэтому устраните свой внутренний цикл.

Также вы можете устранить несколько ненужных переменных в своем коде (например, key, tokenkey). Вам также не нужна третья карта 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

 Смежные вопросы

  • Нет связанных вопросов^_^