先说结论:
- ArryaList查找快,插入、删除慢
- LinkedList查找慢,插入、删除快
再说原因:
- ArrayList由数组实现,可以直接通过下标查找元素;关于插入和删除,应该是在指定位置进行操作。不论插入和删除,都需要移动数组中后面的数据。指定的位置越靠前,开销越大。
- LinkedList由双向链表实现,所以查找特定位置数据,只能从头遍历;而插入和删除操作,不需要移动链表中数据,只需调整前后指向就可以。
多说一点:
不要用for循环遍历LinkedList,使用iterator效率会好很多。两者时间负责度分别为O(n^2),O(n)。原因是,当我们用for循环时,每次get(i),都会从头遍历链表,即先从第0位,找到其后的node(1),再找到node(1)后的node(2)…一直找到第i个节点。而iterator遍历时,会缓存当前节点的前后节点,等查找下一节点时,直接从缓存,就可以找到需求查找的节点信息。