改数需备案-记录链表数据量 | 带你学《Java面向对象编程》之九十一

上一篇:要操作先有数-教你增加链表数据 | 带你学《Java面向对象编程》之九十
【本节目标】
通过阅读本节内容,你将学会通过在每次添加新节点时使count自增实现链表长度的记录,借此实现size()方法供给调用方获取链表长度。

获取数据长度:public int size()

在链表之中往往需要保存大量的数据,那么这些数据往往需要进行数据个数的统计操作,所以应该在LinkImpl子类里面追加有数据统计信息,同时当增加或删除数据时都应该对个数进行修改。

1、在ILink接口里面追加一个获取数据个数的方法:

public int size() ;    //获取数据的个数

2、在LinkImpl子类里面追加有一个个数统计的属性

private int count ;     //保存数据的个数

3、在add()方法里面进行数据个数的追加:

public void add(E e){
    if(e == null){
        return ;
    }
    //数据本身是不具有关联特性的,只有Node类有,要想关联处理就必须将数据包装在Node类中
    Node newNode = new Node(e);    //创建一个新的节点
    if (this.root == null){            //现在没有根节点
         this.root = newNode;       //第一个节点作为根节点
    }else{                          //根节点存在
         this.root.addNode(newNode);      //将新节点保存在合适的位置
    }   
         this.count++ ;  
}

4、需要在LinkImpl子类里面来返回数据的个数:

 public int size() {
 return this.count ;
  }
interface ILink<E> {         //设置泛型避免安全隐患
       public void add(E e) ;   //增加数据
       public int size() ;    //获取数据的个数
}
class LinkImpl<E> implements ILink<E> {
      private class Node {         //保存节点的数据关系
            private E data ;      //保存数据
            private Node next ;       //保存下一个引用
            public Node(E data) {          //有数据的情况下才有意义
                this.data = data ;
            }
            //第一次调用:this = LinkImpl.root ;
            //第二次调用:this = LinkImpl.root.next ;
            //第三次调用:this = LinkImpl.root.next.next ;
            public void addNode(Node newNode){      //保存新的Node数据
                if (this.next == null) {   //当前节点的下一个节点为null
                     this.next = newNode;      //保存当前节点
                }else {
                     this.next.addNode(newNode);
                }
            }
      }
      //------------以下为Link类中定义的成员-----------------
      private Node root ;       //保存根元素
      private int count ;     //保存数据的个数
      //------------以下为Link类中定义的方法-----------------
      public void add(E e){
         if(e == null){
             return ;
         }
        //数据本身是不具有关联特性的,只有Node类有,要想关联处理就必须将数据包装在Node类中
         Node newNode = new Node(e);    //创建一个新的节点
         if (this.root == null){            //现在没有根节点
            this.root = newNode;       //第一个节点作为根节点
         }else{                          //根节点存在
            this.root.addNode(newNode);       //将新节点保存在合适的位置
         }   
         this.count++ ;  
     }
     public int size() {
         return this.count ;
     }
}
public class LinkDemo{
    public static void main(String args[])  {
        ILink<String> all = new LinkImpl<String>() ;
        System.out.println("【增加之前】数据个数:" + all.size()) ;
        all.add("Hello") ;
        all.add("World") ;  
        all.add("MLDN") ;   
        System.out.println("【增加之后】数据个数:" + all.size()) ;
    }
}

改数需备案-记录链表数据量 | 带你学《Java面向对象编程》之九十一
图一 执行结果图

只是对于数据保存中的一个辅助功能。

想学习更多的Java的课程吗?从小白到大神,从入门到精通,更多精彩不容错过!免费为您提供更多的学习资源。
本内容视频来源于阿里云大学

下一篇:教你实现链表判空与取值方法 | 带你学《Java面向对象编程》之九十二
更多Java面向对象编程文章查看此处

上一篇:大连接需求的实现 | 带你读《5G 空口设计与实践进阶 》之六


下一篇:修改HBase的rowkey设计把应用的QPS从5W提升到50W