Ngoài phản hồi arshaji tôi muốn biết nếu có lợi ích hiệu suất khi sử dụng size()
trong vòng lặp và lưu trữ trước.Tôi tin rằng kết quả cho thấy trình biên dịch tối ưu hóa mọi thứ và truy cập vào chiều dài của một danh sách giống như truy cập một biến (tôi lo rằng thực tế nó phải trải qua một hàm sẽ làm chậm mọi thứ).
Đây là thời gian cần thiết cho những người hai cho phương pháp khác nhau của vòng lặp:
for(long i = 0 ; i < mylist.size(); i++){}
VS
for(long i = 0 ; i < 10_000_000; i++){}
Dưới đây là kết quả cho một danh sách mười triệu elems:
fixed length:
,162,157,151,157,156,159,157,149,150,170,158,153,152,158,151,151,156,156,151,153
getSize:
,164,156,159,154,151,160,162,152,154,152,151,149,168,156,152,150,157,150,156,157
import java.util.ArrayList;
import java.util.List;
public class Main {
final static int LENGTH_SAMPLE = 20;
final static long LENGTH = 10_000_000;
public static void main(String[] args) {
List<Long> mylist = new ArrayList<>();
for(long i = 0 ; i < LENGTH; i++){
mylist.add(i);
}
System.out.println("fixed length:");
for(int i = 0 ; i < LENGTH_SAMPLE; i++){
System.out.printf("," + fixedSize(mylist));
}
System.out.println("");
System.out.println("getSize:");
for(int i = 0 ; i < LENGTH_SAMPLE; i++){
System.out.printf("," + fctSize(mylist));
}
}
private static long fixedSize(List list){
long start = System.currentTimeMillis();
for(long i = 0 ; i < LENGTH; i++){
System.currentTimeMillis();
}
return System.currentTimeMillis() - start;
}
private static long fctSize(List list){
long start = System.currentTimeMillis();
for(long i = 0 ; i < list.size(); i++){
System.currentTimeMillis();
}
return System.currentTimeMillis() - start;
}
}
Những không nên có bất kỳ khác nhau. –