所以我想测试ArrayList和LinkedList remove()
方法的时间只是为了好玩。
我在下面写了代码来做 - 一切都是不言自明的:deleteEachNth
贯穿我的列表并删除它看到的每个第n个元素。
我期待看到LinkedList获得巨大的优势,因为它的删除时间是恒定时间操作,但我的代码会产生相反的结果:对于10000个元素,ArrayList的速度是其两倍。
当然,我认为我写错了,或许使用了get()
,这会使LinkedList减慢到某个地方,但事实并非如此。
这里有什么问题?
编辑:用System.currentTimeInMillis()
替换System.nanoTime()
时,LinkedList对我的代码仍然表现更差。
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.stream.IntStream;
public class Test{
List<String> myList;
Test(List<String> someList){
myList = someList;
}
void eliminateEachNth(int n){
for (int i = 1; i < myList.size(); i++) {
if(i%(n-1)==0){
myList.remove(i);
}
}
}
public static void main(String[] args){
List<String> someList = new ArrayList<>();
IntStream.range(1, 10000).forEach(i->someList.add(Integer.toString(i)));
Test testArray = new Test(someList);
long cur = System.currentTimeMillis();
testArray.eliminateEachNth(3);
System.out.println("array list took " + (System.currentTimeMillis() - cur) + "millis");
System.out.println(someList);
List<String> anotherList = new LinkedList<>();
IntStream.range(1, 10000).forEach(i->anotherList.add(Integer.toString(i)));
Test testLinked = new Test(anotherList);
cur = System.currentTimeMillis();
testLinked.eliminateEachNth(3);
System.out.println("linked list took " + (System.currentTimeMillis() - cur) + "millis");
System.out.println(anotherList);
}
}