4.22JavaLinkedList特点和底层实现
2021/4/22 20:25:34
本文主要是介绍4.22JavaLinkedList特点和底层实现,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
4.22JavaLinkedList特点和底层实现
本章内容
LinkedList特点
LinkedList底层实现
LinkedList实现方法
LinkedList特点
-
查询效率低
-
增删效率高
-
线程不安全
LinkedList底层实现
双向链表实现的存储
特点:
-
双链表,是链表的一种
-
每个数据节点中都有两个指针,分别指向前一个节点和后一个节点
优势:
-
从任意节点开始都可以很方便地找到所有节点
解析:
-
在使用链表地时候,每一个头部和尾部称为节点
-
单词表示:Node或者Entry
-
-
每一个节点包含三个部分:
-
第一个节点头部有一个头指针
-
上一个节点地---指向上一个数据
-
自己保存的数据
-
下一个节点---指向下一个数据
-
-
LinkList地结构让增、删变得很简单
-
先说删
-
删掉a2
-
让a1的尾节点指向a3这个数据本身
-
让a3的头节点指向a1这个数据本身
-
这样就实现了删
-
-
增加a2
-
让a1的尾节点指向a2的数据本身
-
让a3的头节点指向a2的数据本身
-
-
-
如图:
自定义列表还需要定义节点对象:
定义节点对象
每一个节点对象所包含的内容:
class Node{ Node previous; //前一个节点 Object element; //本节点保存的数据 Node next; //后一个节点 }
具体实现:
package com.MyCollection; /** * 自定义一个链表---version 1.0 * @author Lucifer */ public class LcfLinkedList { /*自定义列表定义第一个节点*/ private Node first; //开始为null /*定义最后一个节点*/ private Node last; //开始为null /*定义元素总数量*/ private int size; /*往链表加东西,定义一个add方法*/ //"[]"--->"["a"]" public void add(Object obj){ /*因为一开始节点为空,没有数据内容,所以往里面加内容---创建一个节点*/ Node node = new Node(obj); /* 这样就创建好了一个节点 目前和链表没啥关系 */ /*判断是否是第一次往链表里面放元素*/ if (first == null){ /*赋值node给first*/ first = node; /*赋值给last*/ last = node; //注意Node类中的元素一开始是否为空 /* 下面继续往里面放元素 "["a","b"]" 第二次放入的时候first不为空了 再建一个新对象,放入新节点 */ }else { /*将上一个节点的尾节点赋值给下一个节点的头节点*/ node.previous = last; /*第二个元素的尾节点为空*/ node.next = null; /*让last的下一个属性指向*/ last.next = node; /*last本身指向node*/ last = node; } } /*希望输出的结果可视化,重写toString方法*/ //从first开始打印,然后依次往下找 //假设有一个链表["a","b","c"]--->first = a, lsat = c--->最终打印要打印出a,b,c @Override public String toString(){ /*StringBuilder方法*/ StringBuilder sb = new StringBuilder("["); //TODO Auto-generated method stub /*定义一个零时节点*/ Node temp = first; /*在这里做判断---temp不为空,打印一次*/ while (temp != null){ /*打印出temp,同时让temp指向尾节点*/ // System.out.println(temp.element); /*再"["后+元素*/ sb.append(temp.element + ","); temp = temp.next; } sb.setCharAt(sb.length() - 1,']'); return sb.toString(); } /*测试方法*/ public static void main(String[] args) { /*创建对象,调用方法*/ LcfLinkedList list = new LcfLinkedList(); /*使用add方法*/ list.add("a"); list.add("b"); list.add("c"); System.out.println(list); //因为没有重写toString方法,所以打印出来的内容是包名加数据地址(Hash码) } }
这篇关于4.22JavaLinkedList特点和底层实现的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-29DataGrip使用ssh连接数据库的操作流程
- 2024-05-28SpringBoot3.2更新声明!
- 2024-05-28中外程序员到底有啥区别?
- 2024-05-25外企也半夜发布上线吗?
- 2024-05-24鸿蒙原生应用再新丁!芒果TV 入局鸿蒙
- 2024-05-22基本概念
- 2024-05-22检索数据
- 2024-05-22排序数据
- 2024-05-22基础过滤数据
- 2024-05-22通过逻辑操作符过滤数据