2017-05-31 5 views
-3

これはjavaでの私のデータです。処理が速く、応答が得られない場合、このコードをどのように高速化するために最適ですか?2つのforループは、時間を短縮するために何らかの解決策を実行するのに時間がかかりますJAVA

List<EventLog> eventLogs = new ArrayList<EventLog>(); 
List<EventLog> eventLogData = get(currentUser, data); 
Map<String, Integer> map = new HashMap<String, Integer>(); 

for (EventLog rep : eventLogData) { 
    if (map.containsKey(rep.getEventType())) { 
    map.put(rep.getEventType(), map.get(rep.getEventType()) + 1); 
    } else { 
    map.put(rep.getEventType(), 1); 
    } 
} 

for (Map.Entry<String, Integer> entry : map.entrySet()) { 
    EventLog list = new EventLog(); 
    list.setEventType(entry.getKey()); 
    list.setCount(entry.getValue()); 
    eventLogs.add(list); 
} 

return eventLogs; 
+5

「巨大な」および「長い時間」はあまり具体的ではありません。詳しく教えてください。 – OldProgrammer

+0

はどちらも線形時間で実行されます(1レベルの深さだけです)、目的の結果がどのようなもので、ループが遅すぎるかを詳細に指定しない限り、おそらく何もできません。 – luk2302

+1

アプリケーションをプロファイルしましたか?実行時間が非常に多いコードブロックであることは確かですか?このブロックが最適化の恩恵を受けることは確実ですか? – scottb

答えて

-6

list.size()を使用してリストのサイズを取得しますが、代わりにforeachループのために使用することができ、このような一つのループでコードを変更します。

for(int a=0, b=5 ; a<=5 ; a++,b--){ 
    // do your stuff here 
} 
+5

問題のコードが何をしているのか理解していますか?それはカウンターカウンターを使っています。 – Andreas

+0

@Muhammad Waqasコードを更新することができますコードで私はバックエンドとしてmongodbを使用しています –

+0

あなたのコードはどこですか? –

0

を、あなたは、代替高性能コレクションライブラリを使用して考えがありますか?
Troveライブラリを使用して実装しました。それはプリミティブなintの代わりに整数ののを扱う

  • マップが更新され

    1. ので、はるかに高速実行が元の実装に代わり2の単一のアクセス(adjustOrPutValue)が必要(のcontainsKeyおよび取得)を提供し、すべての回避しますボクシングおよびアンボクシング操作を行い、より少ないメモリを消費する。

    List<EventLog> eventLogData = get(currentUser, data); 
    TObjectIntMap<String> map = new TObjectIntHashMap<>(); 
    
    for (EventLog rep : eventLogData) { 
        map.adjustOrPutValue(rep.getEventType(), 1, 1); 
    } 
    
    List<EventLog> eventLogs = new ArrayList<>(); 
    map.forEachEntry(new TObjectIntProcedure<String>() { 
        @Override 
        public boolean execute(String key, int value) { 
         EventLog list = new EventLog(); 
         list.setEventType(key); 
         list.setCount(value); 
         eventLogs.add(list); 
         return true; 
        } 
    }); 
    
    return eventLogs; 
    
  • 関連する問題