Java还要再学一遍基础(七)LinkedList详解
来源:互联网 发布:知而不争 不可谓忠翻译 编辑:程序博客网 时间:2024/04/27 22:29
LinkedList介绍
LinkedList与ArrayList一样都是属于AbstractList的子类。但是内部实现与ArrayList不同的是LinkedList是以链表的数据结构来实现的,通过引用来指向上一个或者下一个节点。在数据的插入和删除上面有很高的效率,同时可以被用作队列,栈或者双端队列并提供了对应的操作。
特性:
- 双端队列实现。
- 线程不安全。
- 插入删除效率很高。
- 不能快速随机访问(虽然提供了get等方法,但是使用循环,效率很低下)
##源码分析
1. 类定义
public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Serializable
继承AbstractSequentialList(AbstractList的子类),同时实现了List借口,Deque接口(双端队列),Cloneable接口。与ArrayList不同的是没有继承RandomAccess接口,因此不能随机访问。
- 重要属性
//元素的个数,不能序列化transient int size = 0;//第一个节点,不能序列化transient Node<E> first;//最后一个节点,不能序列化transient Node<E> last;
Node节点的定义类:
private static class Node<E> { E item; Node<E> next; Node<E> prev; Node(Node<E> prev, E element, Node<E> next) { this.item = element; this.next = next; this.prev = prev; }}
其中有两个引用分别指向上一个节点和下一个节点。
3. 重要的方法
方法部分不不做详细描述,都是对链接的修改。
get方法:
public E get(int index) { checkElementIndex(index); return node(index).item;}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;}
虽然说不支持快速随机访问,但是还是提供了相应的get方法,用的是暴力循环,但是还是根据index的值与size/2的大小缩小了循环的范围,不过效率还是很差。
4. Iterator
LinkedList的Iterator和ArrayList一样都是有一个Itr实现Iterator接口提供基本的Iterator的功能,同时提供一个ListItr类继承子Itr实现了ListIterator接口,提供更加更富的功能。
但是从JDK1.6开始同时还提供了DescendingIterator继承自Iterator接口。提供一个反向遍历的迭代器:
LinkedList<Integer> list = new LinkedList<>();list.add(1);list.add(2);list.add(3);list.add(4);for(Iterator<Integer> it = list.descendingIterator(); it.hasNext();) System.out.print(it.next() + " ");
输出:
4 3 2 1
阅读全文
0 0
- Java还要再学一遍基础(七)LinkedList详解
- Java还要再学一遍基础(六)ArrayList详解
- Java还要再学一遍基础(十一)WeakHashMap详解
- Java还要再学一遍基础(十五)
- Java还要再学一遍基础(一)认识java
- Java还要再学一遍基础(二)Java中的关键字
- Java还要再学一遍基础(三)hashCode方法
- Java还要再学一遍基础(五)String,StringBuilder,StringBuffer
- Java还要再学一遍基础(八)Vector与ArrayList
- Java还要再学一遍基础(九)HashMap原理
- Java还要再学一遍基础(十)LinkedHashMap原理
- Java还要再学一遍基础(十二)小数运算,BigDecimal,四舍五入
- Java还要再学一遍基础(十三)foreach循环
- Java还要再学一遍基础(十六)- DelayQueue使用
- Java还要再学一遍基础(十七)- Object的finalize方法
- Java基础集合类(二):LinkedList详解
- JAVA基础(七) Filter详解
- Java还要再学一遍基础(四)JDK1.8新特性default,static
- 8.修改应用的图标或者名称、引用资源的两种方式
- apache与nginx优缺点比较(总结)
- 476. Number Complement
- 一.React-Native学习之Window环境下搭建环境配置
- 数据库逆向框架代码生成工具:MyBatis Generator的使用
- Java还要再学一遍基础(七)LinkedList详解
- c语言中的回调函数
- 问题记录
- android studio 初次使用Kotlin(环境准备篇)
- C#实现打印功能
- Hbase+zookeeper环境搭建
- SAP HANA 使用HANA Studio 导入CSV文件
- 小白学习javaScript笔记(三)
- 阿里云云栖社区合作指南