for循环性能迭代

时间:2017-08-07 17:52:32

标签: java performance for-loop arraylist

问题是,“我们可能期望method3比method2运行得更快,为什么会这样?”但我不知道。似乎两种方法都执行相同数量的操作。有人可以赐教吗?

ArrayList<Person> method2(Person x, ArrayList<Person> people){
    ArrayList<Person> friends = new ArrayList<Person>();
    for (Person y : people) if (x.knows(y)) friends.add(y);
    return friends;  
}


ArrayList<Person> method3(Person x, ArrayList<Person> people){  
    ArrayList<Person> friends = new ArrayList<Person>();  
    for (int=0; i<people.size(); i++){ 
        Person y = people.get(i);
        if (x.knows(y)) friends.add(y);
    }
    return friends;
}

2 个答案:

答案 0 :(得分:5)

事实并非如此。两种方法都将以几乎相同的速度运行。

如果他们不会以完全相同的速度运行,那么有两件事情可以解决:

  1. 在任何实际情况下都不会有任何区别。

  2. 您无法确定 $msg = ""; if (isset($_POST['upload'])) { $target = "profiles/uploads/".basename($_FILES['image']['name']); if (move_uploaded_file($_FILES['image']['tmp_name'], $target)) {///when upload your file in directory insert yout patch file in directory $db = mysqli_connect("localhost", "root", "", "db"); $images = $_FILES['image']['name']; $target_dir = (isset($_SERVER['HTTPS']) ? "https" : "http") . "://$_SERVER[HTTP_HOST]" ."profiles/uploads/".$images;//your patch file for show in page website $sql = "INSERT INTO user_images (images) VALUES ('$target_dir')"; mysqli_query($db, $sql); $msg = "Image Uploaded Successfully"; header("Location: personal_profile.php?uploadsuccess"); } else { $msg = "There Was A problem uploading image"; } } method2是否会更快运行。

答案 1 :(得分:4)

  

&#34;我们可能期望method3比method2运行得更快,为什么会这样?&#34;

可能但差异应该很小,甚至不被视为选择其中一种的信息。

这两种方法使用方差执行完全相同的操作:for增强method2()和使用{{1}访问for的经典List } get(int index)

method3()的编译代码将导致使用迭代器,在运行时可能需要更长的时间来执行,但它应该没有显着差异。

例如:method2() hasNext()的迭代器执行一些检查和一些非常小的计算:

ArrayList

使用public E next() { checkForComodification(); int i = cursor; if (i >= size) throw new NoSuchElementException(); Object[] elementData = ArrayList.this.elementData; if (i >= elementData.length) throw new ConcurrentModificationException(); cursor = i + 1; return (E) elementData[lastRet = i]; } 方法的for计算量较少:

get(int index)