Java各数据结构的缺陷|Java各数据结构的缺陷 ------ LinkedList
LinkedList特性
LinkedList没什么好说的,在存放大量数据时尤其有用,其插入花费的操作次数仅仅为1,而对比arraylist的插入,花费的操作次数通过aggregate method算出为2,快两倍。
Java中的LinkedList
双向链表,因为内部维护的Node就是双向,而开头写的tail加head更是直接提醒
缺陷在哪
【Java各数据结构的缺陷|Java各数据结构的缺陷 ------ LinkedList】双向链表的一个重要性质就是如果传入的是链表中element的指针,那么删除的复杂度则为O(1),但可惜的是java的remove(object)是通过遍历,然后判断equals进行删除,所以复杂度为O(n),翻看完oracle文档里的说明,并没发现合适的方法可以达到O(1),全部都是遍历,并没有Node指针的接口。最典型的remove:
public boolean remove(Object o) {
if (o == null) {
for (Node x = first;
x != null;
x = x.next) {
if (x.item == null) {
unlink(x);
return true;
}
}
} else {
for (Node x = first;
x != null;
x = x.next) {
if (o.equals(x.item)) {
unlink(x);
return true;
}
}
}
return false;
}
其实现过程也是相当简单,当然,这里的unlink符合O(1)的要求,但也仅仅只是用来删除节点而已。而外部暴露的接口并没有O(1)复杂度的接口
需不需要自己实现一个O(1) 不需要,linkedhashmap就是弥补这个的
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 为什么你的路演总会超时()
- JS中的各种宽高度定义及其应用
- 事件代理
- Java|Java OpenCV图像处理之SIFT角点检测详解
- 2020-10-18|2020-10-18 致各位慢友
- java中如何实现重建二叉树
- 数组常用方法一
- 【Hadoop踩雷】Mac下安装Hadoop3以及Java版本问题
- 中国MES系统软件随工业化成长