package com.learn.dp.iterator;/*** LinkedList里面装了一大堆的Node* 既然Node的一个小手都有拉住另一个Node,我们只要记住开始的那个节点* * 我记住了一个head,记住了一个tail,如果你是第一个新加入进来的节点,* * * @author Leon.Sun**/
public class LinkedList {Node head = null;/*** 所以你会发现这样一个问题,当我们添加新节点的时候,如果我们知道哪个节点是最后一个,* 那就爽很多了,因为我们只要让最后一个拉住我们的小手就可以* 所以我们可以这么写*/Node tail = null;/*** 要有一个东西记录到底有多少个元素了* 其实这个size是冗余数据,你不记录也可以* 但是我们有一个冗余数据,没添加一个就让他加加* 最后只要return size就可以了*/int size = 0;/*** 当我们往链表里添加一个节点的时候,这个时候我们该怎么做,* 当然你要做各种判断,第一个如果head本身就是空的话,那么作为你新添加进来的内容,* 它就是第一个节点,添加进来新的Object* * 加入我们已经有了一个节点了,next指向一个空值,当我们再往里面添加一个节点的时候,* 把新的节点放在右边,把前面的next指向它,如果还有第三个,新加进来的就指向空值* * @param o*/public void add(Object o) {/*** 真正的内容是传进来的o,它的next是没有,所以只能传一个空值*/Node n = new Node(o,null);/*** 如果添加进来的是第一个节点,那head就等于n* head等于空,head等于n,tail也等于n* 你是第一个的话你既是头也是尾,如果tail不等于空,那就是一回事*/if(head==null) {head = n;tail = n;}/*** 把tail的这只小手*/tail.setNext(n);/*** tail要变成本身加入进来的节点* 这样一个新的节点就加入进来了*/tail = n;size++;}public int size() {return size;}}
package com.learn.dp.iterator;/*** 在Node里面包括两部分内容* @author Leon.Sun**/
public class Node {public Node() {super();}public Node(Object data, Node next) {super();this.data = data;this.next = next;}/*** 第一部分是数据本身*/private Object data;/*** 第二部分内容是小手要拉住下一个内容*/private Node next;public Object getData() {return data;}public void setData(Object data) {this.data = data;}public Node getNext() {return next;}public void setNext(Node next) {this.next = next;}@Overridepublic String toString() {return "Node [data=" + data + ", next=" + next + "]";}}
package com.learn.dp.iterator;public class MainTest {public static void main(String[] args) {/*** 该用LinkedList*/LinkedList ll = new LinkedList();for(int i=0;i<15;i++) {ll.add(new Cat(i));}System.out.println(ll.size());}
}
15

设计模式之_Iterator_02相关推荐

  1. 【Design pattern】设计模式思路总结(一)

    看了一周的设计模式,跟着小菜的思路走! 从简单工厂过渡策略,后面看的这几个模式都是在单一职责,开放--封闭原则,依赖倒转原则下不断的改进,采用模式写出的代码更容易扩展,维护! 比较容易懂. 装饰模式: ...

  2. GOF23设计模式(结构型模式)代理模式~

    代理模式应用场景十分广泛,随便一个框架都会用到,因此学好代理模式对后续框架学习是最基本的要素!!今天我们就来讲讲代理模式! 目录 1.简介 1. 核心作用 2. 角色分析 2. 应用场景 4. 分类 ...

  3. GOF23设计模式(创建型模式)工厂模式

    目录: 一:工厂模式的核心本质 二:关于面向对象的六大基本原则 三:工厂模式的三大类详解(代码示例,详细分析) 首先,上咱本GOF23所有工厂模式的分类表格!!! 创建型模式 单例模式.工厂模式.抽象 ...

  4. GOF23设计模式(创建型模式)单例模式

    目录: 一:单例模式的核心作用.常见应用场景 二:五种单例模式及其实现 三:关于反射和反序列化破解单例模式的漏洞,以及相应的解决方案 四:测试五种单例模式的效率 一:核心作用及常见应用场景: 核心作用 ...

  5. Python七大原则,24种设计模式

    七大设计原则: 1.单一职责原则[SINGLE RESPONSIBILITY PRINCIPLE]:一个类负责一项职责.  2.里氏替换原则[LISKOV SUBSTITUTION PRINCIPLE ...

  6. Java设计模式:单例模式

    学而时习,稳固而之心, 好久没有复习java的知识了,今天有空温习了单例模式,这里记录一下 单例模式是常见的设计模式的一种,其特点就是 指一个类只有一个实例,且该类能自行创建这个实例  , 保证一个类 ...

  7. 设计模式中的六大基本原则

    软件设计中的基本共识: 1,高内聚,低耦合:如果想使软件系统架构稳定,那么我们期望软件的各模块内元素结合的紧密,而模块之间的耦合度(关联性)越低越好.高内聚不仅体现在模块上,单独的类或方法也应该是内聚 ...

  8. JS中的7种设计模式

    第九章Refactoring to OOP Patterns 重构为OOP模式 7种设计模式: 1,模版方法模式(template method) 2,策略模式(strategy) 3,状态模式(st ...

  9. 设计模式之创建型汇总

    设计模式 创建型 工厂方法模式 定义:定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类,工厂方法让类的实例化推迟到子类中进行 使用场景: 创建对象需要大量重复的代码 客户端(应用层)不依 ...

最新文章

  1. 【FFmpeg】FFmpeg 相关术语简介 ( 容器 | 媒体流 | 数据帧 | 数据包 | 编解码器 | 复用 | 解复用 )
  2. slice的部分说明
  3. 美团笔试最大矩形面积
  4. 腾达fh365虚拟服务器,腾达(Tenda)FH365路由器怎么设置?
  5. 【推荐】介绍两款Windows资源管理器,Q-Dir 与 FreeCommander XE(比TotalCommander更易用的免费资源管理器)...
  6. 【参数辨识】六关节机械臂动力学参数辨识(上)
  7. mysql丢数据无法启动mysql_mysql InnoDB数据无法启动解决办法
  8. Paip.断点调试MYSQL存储过程跟函数的解决方案大法
  9. 用Python做一个无限弹窗
  10. Java学习之贷款案例
  11. 一篇文章带你用Python网络爬虫实现网易云音乐歌词抓取
  12. python识别验证码并自动登录_Python完全识别验证码自动登录实例详解
  13. 【BZOJ5336】【TJOI2018】party
  14. 我是猫,一只特立独行的猫
  15. 关于Windows api 多屏幕显示器识别ID问题。未解决
  16. 不用身份证刷手就能坐飞机,掌静脉还能被应用在哪里领域?
  17. 天猫魔盒部分adb shell或telnet下有用命令
  18. 第十二届蓝桥杯 ——国际象棋
  19. 网易考拉海购Java开发面经(已拿offer)
  20. 微信小程序-一个跑步app

热门文章

  1. JAVA第一个GUI程序---计算器
  2. 对Coverage进行编辑
  3. 【疑】poj 2773 Happy 2006 互素问题(★★☆☆☆)
  4. Confluence 6 索引支持的语言并进行修改
  5. RxJava+Retrofit+MVP+Dagger2
  6. Jersey框架三:Jersey对HTTPS的支持
  7. pytorch:一维线性回归(一)
  8. linux 的内核参数优化,linux 内核参数优化
  9. 创建springmvc配置
  10. 自定义错误代码和提示信息