Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
两个for循环执行任何解决方案都会花费大量时间来减少JAVA时间_Java - Fatal编程技术网

两个for循环执行任何解决方案都会花费大量时间来减少JAVA时间

两个for循环执行任何解决方案都会花费大量时间来减少JAVA时间,java,Java,这是我用java编写的数据。如果数据量很大,那么处理和获得响应将花费大量时间。如何优化此代码以获得快速操作 List<EventLog> eventLogs = new ArrayList<EventLog>(); List<EventLog> eventLogData = get(currentUser, data); Map<String, Integer> map = new HashMap<String, Integer>();

这是我用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;
List eventLogs=new ArrayList();
List eventLogData=get(当前用户,数据);
Map Map=newhashmap();
用于(事件日志代表:事件日志数据){
if(map.containsKey(rep.getEventType())){
map.put(rep.getEventType(),map.get(rep.getEventType())+1);
}否则{
put(rep.getEventType(),1);
}
}
对于(Map.Entry:Map.entrySet()){
事件日志列表=新事件日志();
list.setEventType(entry.getKey());
list.setCount(entry.getValue());
添加(列表);
}
返回事件日志;

像这样在一个循环中修改代码,您可以使用foreach而不是
foreach
循环使用
list.size()
获取列表的大小:


for(int a=0,b=5;a您是否考虑过使用替代的高性能集合库?
这是我的实现,使用库。它提供了更快的执行速度

  • map is update需要单个访问(adjustOrPutValue),而不是原始实现中的两个访问(containsKey和get)
  • 它处理原语int而不是Integer,避免所有装箱和取消装箱操作,并消耗更少的内存
  • List eventLogData=get(当前用户,数据);
    TobjectntMap=新的TobjectnthashMap();
    用于(事件日志代表:事件日志数据){
    map.adjustOrPutValue(rep.getEventType(),1,1);
    }
    List eventLogs=new ArrayList();
    map.forEachEntry(新的tobjectionprocedure(){
    @凌驾
    公共布尔执行(字符串键,int值){
    事件日志列表=新事件日志();
    list.setEventType(键);
    list.setCount(值);
    添加(列表);
    返回true;
    }
    });
    返回事件日志;
    
    “大”和“长时间”不是很具体。请详细说明。它们都是线性时间运行的(只有一级深度),除非您更详细地指定期望的结果是什么以及循环以何种方式太慢,否则您可能无能为力。您分析过您的应用程序吗?您确定这是一个执行时间很长的代码块吗?您确定这个代码块将从优化中受益吗?它看起来很困难为了优化这部分代码,也许当我们看到更大的部分时,我们可以有更好的想象力。也许,有时,我们可以使用另一种方法,如数组等。你甚至了解问题中的代码在做什么吗?它是通过计数器进行分组。@Muhammad Waqas你能在我的代码中更新你的代码吗?先生,我正在使用mongodb作为后端
    for(int a=0, b=5 ; a<=5 ; a++,b--){
        // do your stuff here
    }
    
    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;