如何重写这些代码,以获得更好的性能?
int i = 0;
ArrayList<ArrayList> data = new ArrayList<ArrayList>();
//---- fill data with 2 equally large ArrayLists, 2 table columns here
for (int n = 0; n < data.get(0).size(); n++) { //Loop for whole table
if (i < n){ //not to enter second loop, while in previous second loop
if (data.get(1).get(n) > 0){ // row with condition when to enter second loop
for (i = n; i < data.get(0).size(); i++){ //second loop
if (data.get(0).get(i) > data.get(0).get(n) + 10 ){ // breaks second loop
//somecode
break;
}
}
}
}
}基本上,它会逐行遍历表(第1循环),直到找到第一个特定的“开始”行(第二列> 0),然后从这里查找另一个特定的“结束”行(第二个循环),直到找到它(该行中的值必须比起始行高出至少10个)并结束第二个循环。如果已经在第二个循环中,则不会进入第二个循环。它将只在带结束条件的最后一行( if (i < n)部分)之后查找起始条件。
我知道这很粗糙,我把高中的视觉基础知识变成了java lang。
为了获得更好的性能,我如何以更好的方式对其进行编程,因为表/数组确实很长,而且我必须多次查看它,寻找不同的启动条件(可能使用db而不是arraylist?,数据库查询会是什么样的呢?)
发布于 2016-01-19 16:05:25
就我个人而言,当只有2列时,我不会使用ArrayList。
你可以这样做:
class Column{
Integer first;
Integer second;
}
ArrayList<Column> data = new ArrayList<Column>()但这不应该有太大的区别。顺便说一句:最后告诉你,你的ArrayLists是哪种类型。例如: ArrayList < ArrayList < Integer >>而不是ArrayList < ArrayList > )。
如果"i < n“是非常没有必要的。你可以这样做:
for (int n = 0; n < data.get(0).size(); n++) { //Loop for whole table
if (data.get(1).get(n) > 0){ // row with condition when to enter second loop
int n0=n;
for (; n < data.get(0).size(); n++){ //second loop
if (data.get(0).get(n) > data.get(0).get(n0) + 10 ){ // breaks second loop
//somecode
break;
}
}
}
}java for-循环非常灵活。Java只在调用循环之前调用第一个“参数”,在每次迭代之后调用最后一个“参数”。循环继续到第二个“参数”返回False。
因此,您不必跳过如果-只是增量n的迭代,这也将跳过循环迭代。如果您设置了n=10,那么java将继续调用n=10、11、12等的循环迭代。如果您也使用n作为第二个循环的变量计数器,它就可以满足您的需要。
使用数据库是非常不必要的。
我不清楚你想做什么。调用代码之前对表进行排序可能会打开全新的选项。如果您不想对表进行排序,那么只需逐个元素迭代元素就应该是唯一的可能。
https://stackoverflow.com/questions/34878094
复制相似问题