Java 中的 LinkedList 是单向链表还是双向链表?

来源:互联网 发布:导航触摸屏校正软件 编辑:程序博客网 时间:2024/06/06 05:48

今天继续分享一道Java经典面试题:


题目描述:Java 中的 LinkedList 是单向链表还是双向链表?
是双向链表,你可以检查 JDK 的源码。在 Eclipse,你可以使用快捷键 Ctrl + T,直接在编辑器中打开该类。


于是对于LinkedList的实现做了进一步的探索,得到了这些知识(注:看懂下面的知识需要一些数据结构的知识):


Java—–Collection 实现的LinkedList(双向链表)

Linkedlist,双向链表,优点,增加删除,用时间很短,但是因为没有索引,对索引的操作,比较麻烦,只能循环遍历,但是每次循环的时候,都会先判断一下,这个索引位于链表的前部分还是后部分,每次都会遍历链表的一半 ,而不是全部遍历。 
双向链表,都有一个previous和next, 链表最开始的部分都有一个fiest和last 指向第一个元素,和最后一个元素。增加和删除的时候,只需要更改一个previous和next,就可以实现增加和删除,所以说,LinkedList对于数据的删除和增加相当的方便。 
熟悉链表算法就知道是什么原因,接下来详细讲解一下链表算法,首先给大家看一下我简单实现的链表node:

 class LinkNode<T> {        public LinkNode(LinkNode<T> next, LinkNode<T> previous, T obj) {            this.next = next;            this.previous = previous;            this.obj = obj;        }        private LinkNode<T> next;//下一个节点        private LinkNode<T> previous;//上一个节点        private T obj;        /**         * 删除节点         */        public void remove() {            next.previous = previous;            previous.next = next;        }        /**         * 修改节点         */        public void set(T t) {            LinkNode<T> link = new LinkNode<T>(next, previous, t);            next.previous = link;            previous.next = link;        }        public String toString() {            return obj.toString();        }    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

从这段代码可以看出:

  1、当前对象保存着上一个和下一个对象的引用 
  

private LinkNode<T> next;//下一个节点        private LinkNode<T> previous;//上一个节点
  • 1
  • 2
  • 3

 2、remove一个对象(这里有点不好理解,你可以把链表想成一个锁链,形象思维。):

2.1、当前对象的previous对象的next对先指向的当前对象next。

 2.2、当前对象的next对象previous指向当前对先previous。 
 

   next.previous = previous;//前与后相连            previous.next = next;//后与前相连
  • 1
  • 2

这样就实际上把要删除的对象挤出链接里了。

  3、set一个对象(理解删除这里就比较好理解):

    1、创建一个新对象,这个对象的next和previous与当前对象相同。

    2、把this.next.previous指向新创建的对象。

    3、把this.previous.next指向新创建的对象。 
    

public void set(T t) {            LinkNode<T> link = new LinkNode<T>(next, previous, t);//新对象            next.previous = link;//改变next            previous.next = link;//改变previous        }
  • 1
  • 2
  • 3
  • 4
  • 5

这样这个对象就被替换掉了。


资料来自于博客:http://blog.csdn.net/qq_28306343/article/details/52186686


阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 简笔画画 楼的组词 楼字组词 不要惹正太 遇琼楼 了不起的修仙模拟器琼楼 楼脆脆 薄薄 薄薄的读音 薄薄读音 薄薄的 口腔内壁掉薄薄的白皮 薄薄的齐刘海 冲破了那层薄薄障碍 薄薄一张口 能啃硬骨头 薄薄的故乡 隔着薄薄的衣服覆上她的总裁 薄薄的什么填空 西塘水乡第一楼客栈 剑观山河 楼观台 楼观台简介 楼观台旅游 西安到周至楼观台 周至楼观台简介 楼观台一日游的攻略 农家俏辣媳 楼观台 张家界大观台 楼观台景区 楼观台旅游攻略 楼观台门票 周至楼观台门票 西安楼观台 楼观台门票多钱 楼观台财神庙门票 带上包子闯关东 楼观台 壶口观景楼大酒店 和顺观湖楼民居 周至楼观驿站 西安楼观道温泉住宿 隔楼设计 70平米复式楼装修设计