首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java arrayList循环性能

java arrayList循环性能
EN

Stack Overflow用户
提问于 2016-01-19 13:29:07
回答 1查看 495关注 0票数 2

如何重写这些代码,以获得更好的性能?

代码语言:javascript
复制
    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?,数据库查询会是什么样的呢?)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-19 16:05:25

就我个人而言,当只有2列时,我不会使用ArrayList。

你可以这样做:

代码语言:javascript
复制
    class Column{
        Integer first;
        Integer second;
    }

    ArrayList<Column> data = new ArrayList<Column>()

但这不应该有太大的区别。顺便说一句:最后告诉你,你的ArrayLists是哪种类型。例如: ArrayList < ArrayList < Integer >>而不是ArrayList < ArrayList > )。

如果"i < n“是非常没有必要的。你可以这样做:

代码语言:javascript
复制
    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作为第二个循环的变量计数器,它就可以满足您的需要。

使用数据库是非常不必要的。

我不清楚你想做什么。调用代码之前对表进行排序可能会打开全新的选项。如果您不想对表进行排序,那么只需逐个元素迭代元素就应该是唯一的可能。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34878094

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档