在下面这段代码中,我发现总是删除第一个listnode,并且打印第一个节点比保持列表完整并在所有节点上迭代更有效(就执行时间而言)。我想知道这是因为当我总是删除第一个节点时,我只需要将启动节点更新到下一个节点,然后只需获取第一个节点即可打印该值。如果通过保持list intanct遍历整个列表,则get操作每次都将遍历到指定的索引并获取该值。 现在我的问题是: 1)我的理解是否正确? 2)两种方式应该在同一时间执行 3)是否有其他推理?Java中的LinkedList更新性能
public class Ddbrw {
public List<Integer> ListValidation()
{
List<Integer> lst = new LinkedList<>();
for(int i = 0; i < 20; i++){
lst.add(new Integer(1)); lst.add(new Integer(5));
lst.add(new Integer(9)); lst.add(new Integer(7));
lst.add(new Integer(5)); lst.add(new Integer(61));
lst.add(new Integer(8)); lst.add(new Integer(12));
}
return lst;
}
public static void main(String[] args)
{
Ddbrw obj = new Ddbrw();
Ddbrw obj2 = new Ddbrw();
List<Integer> lst = obj2.ListValidation();
int size = lst.size();
long startTime = System.currentTimeMillis();
for(int i = 0; i < size; i++) {
System.out.print(lst.get(i));
}
long endTime = System.currentTimeMillis();
System.out.println("*************");
System.out.println(endTime-startTime);
System.out.println("*************");
List<Integer> lst2 = obj.ListValidation();
long startTime1 = System.currentTimeMillis();
for(int k = 0; k < lst2.size();) {
System.out.print(lst2.get(k));
lst2.remove(k);
}
long endTime1 = System.currentTimeMillis();
System.out.println("*************");
System.out.println(endTime1-startTime1);
System.out.println("*************");
}
}
'新的整数(1)'从来不使用这个,总是用'Integer.valueof(1)' 。这对于大多数盒装原语都是如此。此外,这不是你如何基准Java程序的基准;你必须预热JVM。 –
更好的是,只需使用'1'。例如,'lst.add(1);'。 – shmosel