好的网站怎么设计,建设网站商城后台系统,专业做财经直播网站,做网站加入广告联盟jdk1.7.0_79上文里解析了有关ArrayList中的几个常用方法的源码——《有关ArrayList常用方法的源码解析》#xff0c;本文将对LinkedList的常用方法做简要解析。LinkedList是基于链表实现的#xff0c;也就是说它具备了链表的优点和缺点#xff0c;随机访问慢、插入删除速度快…jdk1.7.0_79上文里解析了有关ArrayList中的几个常用方法的源码——《有关ArrayList常用方法的源码解析》本文将对LinkedList的常用方法做简要解析。LinkedList是基于链表实现的也就是说它具备了链表的优点和缺点随机访问慢、插入删除速度快。既然是链表那么它就存在节点数据结构也不存在容量大小的问题来一个在尾部添加一个。//LinkedList$Nodeprivate static class Node {E item;Node next;Node prev;Node(Node prev, E element, Node next) {this.item element;this.next next;this.prev prev;}}第一个默认不带参数的构造方法构造一个空链表。//1.LinkedList默认构造方法public LinkedList() {}第二个构造方法能把一个集合作为一个参数传递同时集合中的元素需要是LinkedList的子类。//2.LinkedList能将一个集合作为参数的构造方法public LinkedList(Collection extends E c) {this();addAll(c);}两个构造方法都比较简单接下来看元素的插入及删除等方法。public boolean add(E e) {linkLast(e); //将元素添加到链表尾部return true;}//LinkedList#linkLastvoid linkLast(E e) {final Node l last; //链表尾指针引用暂存final Node newNode new Node(l, e, null); //构造新节点last newNode; //将链表的尾指针指向新节点if (l null) //此时为第一次插入元素first newNode;elsel.next newNode;size; //链表数据总数1modCount; //modCount变量在《有关ArrayList常用方法的源码解析》提到过增删都会1防止一个线程在用迭代器遍历的时候另一个线程在对其进行修改。}学过《数据结构》的同学相信看到链表的操作不会感到陌生接着来看看删除指定位置的元素remove(int)方法。//LinkedList#removepublic E remove(int index) {checkElementIndex(index); //检查是否越界 index 0 index sizereturn unlink(node(index)); //调用node方法查找并返回指定索引位置的Node节点}//LinkedList#node根据索引位置返回Node节点Node node(int index) {if (index (size 1)) { //size 1 size / 2如果索引位于链表前半部分则移动fisrt头指针进行查找Node x first;for (int i 0; i index; i)x x.next;return x;} else { //如果索引位于链表后半部分则移动last尾指针进行查找Node x last;for (int i size - 1; i index; i--)x x.prev;return x;}}查找到index位置的Node后调用unlink方法摘掉该节点。//LinkedList#unlink一看即懂E unlink(Node x) {// assert x ! null;final E element x.item;final Node next x.next;final Node prev x.prev;if (prev null) {first next;} else {prev.next next;x.prev null;}if (next null) {last prev;} else {next.prev prev;x.next null;}x.item null;size--;modCount;return element;}从代码中就能看出LinkedList和ArrayList两者的优缺点由于只涉及简单的链表数据结构所以不再对其他方法进行解析。