两个for循环执行任何解决方案都会花费大量时间来减少JAVA时间
这是我用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>();
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;