我想测试时间,看看显示三百万个数字需要多长时间,但我不知道如何做到这一点。任何想法将不胜感激。
import java.util.*;
public class LinkedListProgram {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
LinkedList<Integer> list = new LinkedList<Integer>();
Random randomNumbers = new Random();
System.out.println("Enter number of integers");
int number = input.nextInt();
for (int i=0; i < number; i++){
list.add(randomNumbers.nextInt(100));
}
for (Iterator i = list.iterator(); i.hasNext();) {
Integer integer = (Integer) i.next();
System.out.println(integer);
}
}
}
答案 0 :(得分:0)
我通常使用junit或ngunit来感受运行时。它会告诉你测试在你的ide中与控制台分开运行需要多长时间。
或者您可以像这样记录开始时间和结束时间:
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date date = new Date();
System.out.println(dateFormat.format(date));
doStuff();
date = new Date();
System.out.println(dateFormat.format(date));
或者您可以记录执行时间:
long start = System.currentTimeMillis();
System.out.println("Going to call the method.");
doStuff();
System.out.println("Method execution completed.");
long elapsedTime = System.currentTimeMillis() - start;
System.out.println("Method execution time: " + elapsedTime + " milliseconds.");
你可以使用log4j,如果你想在其他地方写(即文件),而不是把它全部混在控制台中
logger.info(dateFormat.format(date);
如果你想变得更加漂亮,你可以使用AOP切入点来记录方法执行的开始和结束时间,例如spring aop。代码来自此处:http://veerasundar.com/blog/2010/01/spring-aop-example-profiling-method-execution-time-tutorial/
@Aspect
public class BusinessProfiler {
@Pointcut("execution(* com.veerasundar.spring.aop.*.*(..))")
public void businessMethods() { }
@Around("businessMethods()")
public Object profile(ProceedingJoinPoint pjp) throws Throwable {
long start = System.currentTimeMillis();
System.out.println("Going to call the method.");
Object output = pjp.proceed();
System.out.println("Method execution completed.");
long elapsedTime = System.currentTimeMillis() - start;
System.out.println("Method execution time: " + elapsedTime + " milliseconds.");
return output;
}
}
打印到控制台可能是一个瓶颈,因为它阻止了io - 你为什么要在控制台上打印这么多?这个测试有价值吗?
答案 1 :(得分:0)
如果您有兴趣检查LinkedList的性能并可能将其与ArrayList或常规数组进行比较,那么您可能希望删除println
语句。显示器的输出比在内存中移动数据花费的时间要多得多。
import java.util.*;
public class LinkedListProgram {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
LinkedList<Integer> list = new LinkedList<Integer>();
Random randomNumbers = new Random();
System.out.println("Enter number of integers");
int number = input.nextInt();
long start = System.currentTimeMillis();
for (int i=0; i < number; i++){
list.add(randomNumbers.nextInt(100));
}
long generateTime = System.currentTimeMillis();
int sum=0;
for (int x : list) {
sum += x
}
long endTime = System.currentTimeMillis();
System.out.println("Time to gernerate numbers: " + (generateTime - start) );
System.out.println("Time to sum list: " + (endTime - generateTime) );
}
}