这是我的三个班级,如下:
Array_List.java:
import java.util.*;
public class Array_List {
public long startTime, difference = 0;
public ArrayList<Integer> a;
public Array_List() {
a = new ArrayList<Integer>();
}
public void buildArray() {
startTime = System.currentTimeMillis();
while (difference <= 10000) {
int r = (int)(Math.random()*10);
a.add(r);
difference = System.currentTimeMillis() - startTime;
}
}
}
此类创建一个数组列表并对其创建进行计时。
在下一个Java类中,我使用Array_List的大小初始化向量类的大小。我希望它们的大小相同,以便可以比较速度。由于我使Array_list的大小取决于它的速度。然后,我可以使用相同的大小比较向量。
Vectors.java:
import java.util.*;
public class Vectors {
public long startTime, difference = 0;
public Vector<Integer> a;
public Vectors(int size) {
a = new Vector<Integer>(size);
}
public void buildVectors() {
int i=0;
startTime = System.currentTimeMillis();
while(i<=a.size()) {
int r = (int)(Math.random()*10);
a.add(r);
difference = System.currentTimeMillis() - startTime;
i++;
}
}
}
下一类将同时运行这两种方法。
performanceOfArrays.java:
import java.util.*;
public class performanceOfArrays {
public static Array_List arrayList;
public static Vectors vectors;
public static void main(String[] args) {
arrayList = new Array_List();
arrayList.buildArray();
S.ystem.out.println("Testing the speed of an array list:");
System.out.print("The speed of composing an array list with " + arrayList.getSize());
System.out.print(" integers is " + arrayList.getSpeed() + " seconds.");
vectors = new Vectors(arrayList.getSize());
vectors.buildVectors();
System.out.print("Testing the speed of a vector:");
System.out.println("The speed of composing a vector with " + vectors.getSize());
System.out.print(" integers is " + vectors.getSpeed() + " seconds.");
}
}
我不断遇到Vectors.java的内存和速度问题。我知道这与我的buildVectors()方法有关。似乎该方法不会停止。
任何帮助您做什么的事情,将不胜感激。
答案 0 :(得分:1)
在用于矢量的代码中,您使用while (i < a.size())
,但随后调用a.add()
,这会将元素添加到矢量并增大其大小。因此,您的while循环永远不会结束。
如果您知道要添加的元素数量,则最好使用for
循环。
BTW向量将所有方法都标记为已同步,因此无论如何都要慢于arraylist