链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,操作复杂。由于不必须按顺序存储,链表在插入的时候可以达到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. CEO不当了,CTO也不做了!我要回去写代码,这才是我所热爱的!
  2. Eclipse报错:gc overhead limit exceeded eclipse
  3. Apache Druid(一)简介
  4. sql 动态存储过程
  5. Python 告诉你疫情扩散有多可怕
  6. LVCOLUMN和LVITEM结构体解析
  7. 中国《人工智能标准化白皮书2018》发布完整版
  8. 根号n向下取整的c语言编程,【向上取整/向下取整】C语言向上或向下取整 函数...
  9. 最新四方支付平台源码(PHP版本,完全开源)提供第四方支付系统搭建服务。
  10. 慕课版软件质量保证与测试(第五章.课后作业)
  11. yy开播特效软件小猫虚拟换肤自定义背景衣服DIY
  12. 网易邮箱大师添加附件显示服务器连接失败,网易邮箱大师如何添加Word附件 添加附件方法步骤详细介绍...
  13. C# OpenXml组件
  14. VBA,工作簿workbook相关操作,workbooks.add workbooks.save workbooks.saveas 等等
  15. cmake:cmake_minimum_required命令
  16. Typo: In word 问题解决。
  17. Panda白话 - G1垃圾收集器 之 Refine线程
  18. buildroot rz sz 配置
  19. vue之router莫名其妙的bug
  20. 第一章Web技术概述

热门文章

  1. Cocos2d-x 3.2键盘操控列表页的初步实现
  2. java项目-第90期基于ssm的嘟嘟二手书商城系统
  3. 一招教你如何在简历上突出工作经验!(干货)
  4. 数论 —— 逆元与同余式定理
  5. android根目录无权访问,关于android:已注册为Git根目录,但未在其中找到任何Git存储库...
  6. java readable_Java-Readable
  7. 安卓开发——升级compileSdkVersion、targetSdkVersion、buildToolsVersion、support包到最新(28)问题解决
  8. bootstrap typeahead实现模糊查询功能
  9. Android 一个改善的okHttp封装库
  10. java游戏服务器面试_服务器 面试