以前在网络上看资料说链表类型的数据结构相比数组来说,更加适合进行插入操作,因为只要移动指针就行了。
跟着bobo老师学完自己编写链表后,反倒对插入操作产生了第一个问题:链表虽然在指定位置插入元素时只要改变插入位置前后元素的指针关系,但是每次找到插入位置时其实还是一个o(n)级别的操作。所以相比与数组而言其优势在哪?
第二个问题,是因为链表指针移动相对比数组插入元素后的赋值操作更加快速吗?
而后,我对两种数据结构做了一下插入操作的对比。测试数据我又有点看不懂了。如下:
第三个问题,为何链表会慢这么多?
不知道是我代码写的有问题还是这就是正常现象。测试代码如下:
public static void main(String[] args) {
int opCount = 10000;
Array<Integer> array = new Array<>();
Random random = new Random();
Random randomIndex = new Random();
long start1 = System.nanoTime();
for (int i = 0; i < opCount; i++) {
array.add(randomIndex.nextInt(array.getSize() + 1), random.nextInt(10000));
}
long end1 = System.nanoTime();
double time1 = (end1 - start1) / 1000000000.0;
System.out.println("array time: " + time1);
LinkedListWithDummyHead<Integer> linked = new LinkedListWithDummyHead<>();
long start2 = System.nanoTime();
for (int i = 0; i < opCount; i++) {
linked.add(randomIndex.nextInt(linked.getSize() + 1), random.nextInt(10000));
}
long end2 = System.nanoTime();
double time2 = (end2 - start2) / 1000000000.0;
System.out.println("linked time: " + time2);
}