先来了解一下链表模式的原理:
首先写一个JavaBean,内容是要添加的元素和该元素的节点。
{
private Object data; //元素本身
private NodeBean next; //下一个节点
public Object getData()
{
return data;
}
public void setData(Object data)
{
this.data = data;
}
public NodeBean getNext()
{
return next;
}
public void setNext(NodeBean next)
{
this.next = next;
}
public NodeBean(Object data, NodeBean next)
{
this.data = data;
this.next = next;
}
public NodeBean()
{
}
public String toString()
{
return data + " " + next;
}
}
接下来,编写一个Iterator类,比如我的类名是IteratorLinkedModel,它具有一些功能性的方法,这里我们介绍添加的方法。同时它里面装入了许多个节点,包括起始节点和结束节点。
public class IteratorLinkedModel
{
//起始节点
NodeBean head = null;
//计数器,记录当前链表里有多少个元素
int size = 0;
//当我们添加新元素的时候,如果知道哪个元素是最后的一个,
//就可以让原来最后一个的元素的节点指向新添加那个元素的节点了,
//所以这里申明一个结束节点,初始值也是空
NodeBean tail = null;
//往链表里添加元素的方法
public Object add(Object o)
{
//new一个Node,传入数据本身,初始next是没有的,所以传个空值
NodeBean nb = new NodeBean(o,null);
//先做个判断,head是否为空
if(head == null)
{
//如何head是空,那么说明当前是第在一个节点上,
//把head的引用指向刚才新构造的那个Node对象
head = nb;
//如果head是nb,那么tail也应该是nb,
//也就是说第一个节点即是龙头也是龙尾
tail = nb;
}
else
{
//其他情况,如果head不等于空,也就是说不是第一个节点
//那么把最后一个节点指向新添加的那个节点
tail.setNext(nb);
//同时tail本身应该变成我们新加进来的那个节点
tail = nb;
}
//只要有新的节点加了进来,计数器就开始累加
size ++;
return o;
}
//返回计数结果
public int size()
{
return size;
}
}
最后编写一个测试类,试一下
public class Test
{static Object o;
public static void main(String[] args)
{
IteratorLinkedModel ilm = new IteratorLinkedModel();
for(int i=1; i<5; i++)
{
o = ilm.add(i);
System.out.println(o);
}System.out.println("计数器结果:" + ilm.size());
}}
最后打印出来对象里的内容:1、2、3、4,以及计数器结果:4 OK!成功!