小编Jam*_*mes的帖子

如何减少此循环的执行时间(java)

我有一段代码,似乎需要花费不寻常的时间来执行.我需要尽可能地降低执行速度.

本质上,代码执行以下操作.我创建了一个对象数组[10] [10] [10].该对象包含一个数字列表,如下所示:

class MyClass{
  ArrayList<Integer> numberList;
      public MyClass(){
          numberList= new ArrayList <Integer> ();
      }
   }


      MyClass storage[][][] = new MyClass[10][10][10];
Run Code Online (Sandbox Code Playgroud)

然后,我有以下代码,将数字添加到列表中

 for(int i =0; i < 200000;i++){
       for(int j = 0; j < 10; j++){
        for(int k = 0; k < 10; k++){
         for(int l = 0; l < 10; l++){            
                   storage[j][k][l].numberList.add(i);
         }
        }
       }
      }
Run Code Online (Sandbox Code Playgroud)

我很确定绝大多数执行时间来自以下行

 storage[j][k][l].numberList.add(i);
Run Code Online (Sandbox Code Playgroud)

更具体地说,它是.add(i).

我是Java的新手,我只熟悉C++.如果ArrayList类似于C++中的列表,那么肯定在末尾添加一个元素需要非常少的CPU时间?是不是因为我做了很多添加操作(可能是一百万)?

我想问的另一件事是我可以通过使用线程加快速度吗?(假设双核处理器有4个线程)我想我可以创建4个线程,每个线程处理50,000个块.但是,我不确定同步.据推测,我必须在存储[] [] []上进行一些互斥.我需要写吗?

synchronized(storage)
Run Code Online (Sandbox Code Playgroud)

或者这样会好吗?

synchronized(storage[j][k][l])
Run Code Online (Sandbox Code Playgroud)

任何帮助非常感谢

问候

java

3
推荐指数
1
解决办法
3275
查看次数

标签 统计

java ×1