数据结构之数组和链表
- A:数组
- 查询快修改也快
- 增删慢
- B:链表
- 查询慢修改也慢
- 增删快
数组的初始长度是10个,数组一旦被初始化就不会被改变.
如果这个时候再增加一个,那他就创建一个跟原数组比较增加50%的新数组,
然后把原数组中的元素放在新数组中,再增加的就添加到新增的这块了,原数组就变成垃圾.
数组:
查询和修改快,是因为直接通过索引获取就可以找到对应的值.
增加和删慢,是因为会被整体移动赋值然后修改.
链表通过什么来形成一个链子呢?
后面一个对象来记录前面一个对象的地址值,通过地址值去查找来形成一个链子.
链表:
查询和修改慢,是因为没有索引需要一个个问(从前开始问或从后开始问).
增加和删除快,是因为直接插入就好不需要重新复制.
/**
* Returns the (non-null) Node at the specified element index.
*/
Node<E> node(int index) {
// assert isElementIndex(index);
if (index < (size >> 1)) {
Node<E> x = first;
for (int i = 0; i < index; i++)
x = x.next;
return x;
} else {
Node<E> x = last;
for (int i = size - 1; i > index; i--)
x = x.prev;
return x;
}
}
数组增加元素很费事,要所有的元素都往后移动。
链表查找元素很费事,要从前或者往后一个个问。