public static void main(String[] args) { List<Integer> list = new ArrayList<Integer>(); int maxNum = 1000000; for (int i = 0; i < maxNum; i++) { list.add(i); } //開始測試不一樣方式的for性能 int listSize = list.size(); Integer searchVal = 66666; boolean searchFlag = false; //基本形式的for循環 long startTime1 = System.currentTimeMillis(); for (int i = 0; i < listSize; i++) { Integer val = list.get(i); if (val.equals(searchVal)) { searchFlag = true; } } long endTime1 = System.currentTimeMillis(); //foreach形式 long startTime2 = System.currentTimeMillis(); for (Integer val : list) { if (val.equals(searchVal)) { searchFlag = true; } } long endTime2 = System.currentTimeMillis(); //輸出運行時間 System.out.println("fori: " + (endTime1 - startTime1)); System.out.println("forearch: " + (endTime2 - startTime2)); }
fori: 5 forearch: 8
public class Student { private String name; private Integer age; public Student(String name, Integer age) { this.name = name; this.age = age; } public String getName() { return name; } public Integer getAge() { return age; } }
public static void main(String[] args) { List<Student> list = new ArrayList<Student>(); int maxNum = 1000000; for (int i = 0; i < maxNum; i++) { list.add(new Student("student" + i, i)); } //開始測試不一樣方式的for性能 int listSize = list.size(); String searchName = "student6666"; boolean searchFlag = false; //基本形式的for循環 long startTime1 = System.currentTimeMillis(); for (int i = 0; i < listSize; i++) { Student val = list.get(i); if (searchName.equals(val.getName())) { searchFlag = true; } } long endTime1 = System.currentTimeMillis(); //foreach形式 long startTime2 = System.currentTimeMillis(); for (Student stu : list) { if (searchName.equals(stu.getName())) { searchFlag = true; } } long endTime2 = System.currentTimeMillis(); //輸出運行時間 System.out.println("fori: " + (endTime1 - startTime1)); System.out.println("forearch: " + (endTime2 - startTime2)); }
fori: 17 forearch: 18
【代碼實例1】通過屢次運行,能夠看出fori確實始終比foreach快,並且在本次的測試中,快的時間還很多。【代碼實例2】中list的元素換成了自定義的對象,通過屢次運行,時間都差很少,甚至有時二者的運行時間相同。若是非得要對fori和foreach進行循環效率的比較的話,仍是建議使用fori的方式。本結果只是針對ArrayList在上述兩個測試程序中測試出的結果,僅供參考。性能