Java設計模式之:Iterator鏈表模式

來源:互聯網
上載者:User

先來瞭解一下鏈表模式的原理:

首先寫一個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!成功!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.