获取数据长度:public int size()
在链表之中往往需要保存大量的数据,那么这些数据网阿旺需要进行数据个数的统计操作,所以应该再LinkImpl的子类里面追加有数据统计信息,同时当增加或删除数据时都应该对个位进行修改。
思路:
- Link接口中定义获取数据长度的方法
- 子类LinkImpl中定义私有变量count记录增加的次数
- 在add方法中计算count++,每新建一个节点加一次(如果有删除节点的方法计算coun--即可)
- 覆写size()方法返回count值
范例:追加一个记录数据长度的方法
class JavaDemo
{
public static void main(String[] args)
{
ILink<String> all = new LinkImpl<String>();
all.add("Heool");
all.add("World");
System.out.println(all.size());
}
}
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;
}
//第一次调用:LinkImpl.root.addNode(),this = LinkImpl.root
//第二次调用:LinkImpl.root.next.addNode(),this = LinkImpl.root.next
public void addNode(Node newNode){ //保存新的Node数据
if(this.next == null){ //root的下一个节点为空
this.next = newNode;
}else{ //如果已经有节点了
this.next.addNode(newNode); //利用递归继续往后查询直到遇到空节点
}
}
}
//----------以下为LinkImpl类中定义的成员-----------
private Node root; //保存根元素
private int count; //保存数据的个数
//----------以下为LinkImpl类中定义的方法-----------
public void add(E e){
if(e == null){ //保存的数据为null
return; //方法调用直接结束
}
//数据本身是不具备关联性的,只有Node类有,那么想实现关联处理就必须将数据封装在Node类中
Node newNode = new Node(e); //创建一个新的节点
if(this.root == null){ //现在没有根节点
this.root = newNode;//第一个节点作为根节点
}else{ //根节点存在
this.root.addNode(newNode); //把创建的新节点交给Node类自行判断放在合适的位置
}
this.count++;//每传入一个对象都会增加
}
public int size(){
return this.count;
}
}