链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,操作复杂。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而线性表和顺序表相应的时间复杂度分别是O(logn)和O(1)。
        使用链表结构可以克服数组链表需要预先知道数据大小的缺点,链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。但是链表失去了数组随机读取的优点,同时链表由于增加了结点的指针域,空间开销比较大。链表最明显的好处就是,常规数组排列关联项目的方式可能不同于这些数据项目在记忆体或磁盘上顺序,数据的存取往往要在不同的排列顺序中转换。链表允许插入和移除表上任意位置上的节点,但是不允许随机存取。链表有很多种不同的类型:单向链表,双向链表以及循环链表。链表可以在多种编程语言中实现。像Lisp和Scheme这样的语言的内建数据类型中就包含了链表的存取和操作。程序语言或面向对象语言,如C,C++和Java依靠易变工具来生成链表。

本篇将采用 jvav 语言实现单向链表

package com.jvav.base;
/*** jvav 是此程序使用的语言* Jvav 类为所有类的超级类*/import com.jvav.project.Jvav;class Node01 {public static void main(String[] args) {Node node = new Node(); //这是第0个节点node.linkNode(new Node("这是第一个节点"));node.linkNode(new Node("这是第二个节点"));node.linkNode(new Node("这是第三个节点"));node.linkNode(new Node("这是第四个节点"));node.linkNode(new Node("这是第五个节点"));node.linkNode(new Node("这是第六个节点"));node.linkNode(new Node("这是第七个节点"));node.ergodicNode(new Noder() {public void ergodic() {System.out.println("这是一个遍历");}});//遍历链表System.out.println();//输出节点System.out.println(node.getNode(-100).str);//返回第0个节点System.out.println(node.getNode(0).str);System.out.println(node.getNode(1).str);System.out.println(node.getNode(2).str);System.out.println(node.getNode(3).str);System.out.println(node.getNode(4).str);System.out.println(node.getNode(5).str);System.out.println(node.getNode(6).str);System.out.println(node.getNode(7).str);System.out.println(node.getNode(100).str);//测试超出的情况下System.out.println();//世界线回溯System.out.println("自学jvav的day12");System.out.println(Jvav.info());}
}class Node extends Jvav { //单向链表//方便演示 不进行封装public String str;public Node next = null;public Node() {}public Node(String str) { //构造方法this.str = str;}public boolean nextExist() { //判断下一个节点是否存在return next != null;}public void linkNode(Node nnode) { //连接节点的方法if (next == null) {next = nnode;return;}if (next.next == null) {next.next = nnode;return;}Node node = new Node();node.next = this.next;while (node.next.next != null) {node.next = node.next.next;//后移一位}node.next.next = nnode;}public void ergodicNode(Noder obj) {//遍历每个节点,执行ergodic()接口的方法//使用匿名内部类Node node = this;if (node.next == null) {obj.ergodic();}while (node.next != null) {//System.out.println(node.str);obj.ergodic();node = node.next;}//System.out.println(node.str);obj.ergodic();//还要执行一次}public Node getNode(int num) { //返回第num个节点的方法if (num <= 0) return this; //返回本身Node node = new Node();node.next = this.next;while (num > 1) {if (node.next.next != null) {node.next = node.next.next;}num--;//超过的话将返回最后的节点}return node.next;//num = 1也在这}
}interface Noder {void ergodic();
}

测试结果:

遍历链表:

测试节点的输出,以及错误节点号的情况
System.out.println(node.getNode(-100).str);//返回第0个节点
System.out.println(node.getNode(0).str);
System.out.println(node.getNode(1).str);
System.out.println(node.getNode(2).str);
System.out.println(node.getNode(3).str);
System.out.println(node.getNode(4).str);
System.out.println(node.getNode(5).str);
System.out.println(node.getNode(6).str);
System.out.println(node.getNode(7).str);
System.out.println(node.getNode(100).str);//测试超出的情况下

世界线回溯

自学Java day12 使用jvav实现链表 从jvav到架构师相关推荐

  1. Java程序员如何从码农晋升为架构师,你跟架构师的差别在哪里?

    一.如何定义架构师 Java架构师,首先要是一个Java程序员,熟练使用各种框架,并知道它们实现的原理.jvm虚拟机原理.调优,懂得jvm能让你写出性能更好的代码;池技术,什么对象池,怎么解决并发量. ...

  2. Java程序猿如何从码农晋升为架构师

    一.架构师的定义 首先必须具有丰富的软件设计与开发经验,这有助于理解并解释所进行的设计是如何映射到实现中去. 其次要具有领导能力与团队协作技能,软件架构师必须是一个得到承认的技术领导,能在关键时候对技 ...

  3. Java进阶之路——从初级程序员到架构师,从小工到专家必会的技能

    怎样学习才能从一名Java初级程序员成长为一名合格的架构师,或者说一名合格的架构师应该有怎样的技术知识体系,这是不仅一个刚刚踏入职场的初级程序员也是工作三五年之后开始迷茫的老程序员经常会问到的问题.希 ...

  4. Java进阶之路——从初级程序员到架构师

    怎样学习才能从一名Java初级程序员成长为一名合格的架构师,或者说一名合格的架构师应该有怎样的技术知识体系,这是不仅一个刚刚踏入职场的初级程序员也是工作三五年之后开始迷茫的老程序员经常会问到的问题.希 ...

  5. 自学Java day28 项目-天上人间酒店管理系统 从jvav到架构师

    一个中小型项目,天上人间酒店管理系统,实现登录,订座,菜单,点餐,结账,订单管理等功能. 技术栈:mysql数据存储,jdbc连接,druid连接池,dbutil操作数据库. 效果演示 登录 餐桌状态 ...

  6. Java开发需要达到什么样的水平才称得上架构师?

    小编就从Java架构师(P7)岗位说起吧,年薪40w,那我们看看什么公司,什么级别可以给到,再看看要求.阿里是Java大厂,所以可以参考阿里的标准,阿里一般是16薪水,所以就是税前2.5w,在阿里应该 ...

  7. java接口的修饰符可以为,附架构师必备技术详解

    第一章 MySQL入门与初步 1.1 MYSQL 简介 1.2 关系数据库管理系统 1.3 MYSQL 使用的 SQL 语言 1.4 MYSQL 数据处理 第二章 MySQL的安装 2.1 MYSQL ...

  8. java工程师应届生工资一般多少,附架构师必备技术详解

    前言 Spring 框架自诞生以来一直备受开发者青睐,有人亲切的称之为:Spring 全家桶. 毋庸置疑,Spring 早已成为 Java 后端开发的行业标准,无数的公司选择 Spring 作为基础的 ...

  9. 18天掌握Java SE jvav梳理总结 从jvav到架构师

    相关链接: 自学Java day6 解决8皇后问题 从jvav到架构师_思维剪刀差的博客 自学Java day8 项目-零钱通 从jvav到架构师_思维剪刀差的博客 自学Java day12 使用jv ...

最新文章

  1. openstack-9:安装neutron网络服务
  2. Open×××的Linux内核版,鬼魅的残缺 part I:The PROTOCOL
  3. 窗口属性 客户矩形_航空公司客户价值分析
  4. 网络的网络——当今的互联网
  5. 探索比特币源码0-bitcoin的编译
  6. 网页端对接linux发起cc,(cc)实现Linux系统调用劫持
  7. linux 用shell比较两个整数的大小
  8. 微信公众号测试账号获取授权须关注
  9. 考研英语 - word-list-25
  10. 江南鹤微信公众号文章采集器,开发完成了!以后再也不发愁采集微信公众号文章了!
  11. 中央电视台硬盘播出系统的扩展应用与维护经验(mxf 格式)
  12. C盘数据丢失恢复详解和注意事项
  13. 13商软 团队博客 列表
  14. 2021高性价比蓝牙耳机榜单,学生党最爱五款平价蓝牙耳机分享
  15. python概念股_宫廷御牛:半导体板块再次爆发,最新最全半导体概念股名单汇总(值得收藏)...
  16. 老调重弹之ffmpeg视频时间同步
  17. ZOJ 1036: 算菜价
  18. Exception in thread main java.lang.NoSuchMethodError: scala.Predef$.ArrowAssoc(Ljava/lang/Object;)
  19. 微信小程序开发 01
  20. python课后题答案董付国_python习题01——董付国学习系列

热门文章

  1. 全网最新正则表达式总结- 简单 便捷 (适用于新手学习正则表达式,老手巩固学习正则表达式)
  2. 转载:用聚宽实现一个多因子策略
  3. matlab dsb调制,幅度调制(AM、DSB、SSB、VSB)
  4. 蓝牙鼠标windows linux,关于windows linux双系统共用蓝牙鼠标的教程
  5. android 自定义心电图,Android动态滚动波形图(心电图)的实现
  6. 罗尔(Rolle)、拉格朗日(Lagrange)和柯西(Cauchy)三大微分中值定理的定义
  7. 我还年轻——献给37岁的自己
  8. python-给登记照换底色(蓝底变红底)
  9. Java小游戏--舒尔特方格
  10. 【发现】中国与日德最可怕的差距,看着寒心