先來瞭解一下鏈表模式的原理:
首先寫一個JavaBean,內容是要添加的元素和該元素的節點。
public class NodeBean implements Serializable
{
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!成功!