首页 > 其他分享 >第一章--迭代器模式

第一章--迭代器模式

时间:2023-11-17 13:22:56浏览次数:43  
标签:index return name 迭代 -- 第一章 Book com public

package com.designer.practice4;
import com.designer.practice4.Iterator;

//所要遍历的集合的接口
public interface Aggregate {


    //添加图书
    public void appendBook(Book book);
    //获取图书
    public Book getBook(int index);
    //获取当前书架的容量
    public int getLength();
    //遍历方法(返回一个迭代器)
    public Iterator iterator();
}

package com.designer.practice4;

import java.util.ArrayList;


//书架
public class BookShelf implements Aggregate{
    //当前书架书籍的数量

    //书籍
    private ArrayList<Book> books;
    //创建书架
    public BookShelf(){
        books=new ArrayList<>();
    }
    //添加图书
    @Override
    public void appendBook(Book book){
        books.add(book);

    }
    @Override
    //获取图书
    public Book getBook(int index){
        return (Book) books.get(index);
    }
    @Override
//获取当前书架的容量
    public int getLength(){
        return books.size();
    }

    @Override
    public Iterator iterator() {
        return new BookShelfIterator(this);
    }
}

package com.designer.practice4;

//书架迭代器
public class BookShelfIterator implements Iterator {
private BookShelf bookShelf;
private int index;//当前遍历到的元素的索引

    public BookShelfIterator(BookShelf bookShelf){
        this.bookShelf=bookShelf;
        this.index=0;
    }
    @Override
    public boolean hasNext() {
        //判断下一个元素是否存在
      if(index < bookShelf.getLength()){
          return true;
      }
        return false;
    }

    @Override
    public Object next() {
        //获取当前元素,并将Index指针后移一位
        Book book = bookShelf.getBook(index);
        index++;
        return book;
    }
}

package com.designer.practice4;

public interface Iterator {
    boolean hasNext();
    Object next();
}

package com.designer.practice4;

public class Book {
    private String name;

    public Book() {
    }

    public Book(String name) {
        this.name = name;
    }

    /**
     * 获取
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }


}

package com.designer.practice4;

public class Main {
    public static void main(String[] args) {
        //创建图书
        Book book1 = new Book("Java");
        Book book2 = new Book("C++");
        Book book3 = new Book("Python");
        //创建书架
        Aggregate abstractBookShelf = new BookShelf();
        //添加图书
        abstractBookShelf.appendBook(book1);
        abstractBookShelf.appendBook(book2);
        abstractBookShelf.appendBook(book3);
        //遍历
        Iterator iterator = abstractBookShelf.iterator();//将图书注入到了书架遍历器当中
        while (iterator.hasNext()) {
            Book book = (Book) iterator.next();
            System.out.println(book.getName());
        }



    }
}

标签:index,return,name,迭代,--,第一章,Book,com,public
From: https://www.cnblogs.com/swtaa/p/17838515.html

相关文章

  • ERROR: Permission to stevenlong123/test.git denied to smith-bing. fatal: Could n
    第一次练习git提交代码到github时出现的错误。这里就是说github服务器拒接了我们,不支持远程连接。发现是因为我使用的是ssh来提交的,ssh是安全连接需要通信双方各有一对公钥私钥,github服务器不会自动交换公钥,需要手动在github存储库中部署自己电脑的公钥。使用git命令“ls-al~/.s......
  • TIOBE开发语言排行榜
    top50TIOBEIndexforNovember2023programminglanguageRefertothefollowingurl:https://www.tiobe.com/tiobe-index/Theclassificationoftheseprogramminglanguages命令式编程语言:C、C++、JavaC#、Java、Script、PHP、VisualBasic、Python、Go、MATLAB、Ko......
  • P1486 [NOI2004] 郁闷的出纳员
    P1486[NOI2004]郁闷的出纳员有两种思路,均使用fhq-treap实现维护一个变量delta表示全局偏移量,对于新插入的数减去偏移量。使用fhq-treap,可以分裂出<mid的部分,直接丢掉。直接用fhq-treap维护一个类似于线段树的懒标记,每次放在根上即可。方法1#include<iostream>#include<r......
  • 日记和编辑器
    日记和编辑器\(n\)个操作,5类:在某个位置后插入一个字符串。区间删除。区间修改为一个字符串(长度可以不等)。查询一段区间某种字符的出现次数查询一段区间匹配模式串\(P\)的次数(\(P\)固定)\(1\len\le10^5,|s|\le10^5,\sum|s|\le10n,|P|\le20\)。对于前4个操作,考虑......
  • 餐巾计划问题
    餐巾计划问题先拆点,将每天拆成两个点,一个表示用完的旧餐巾①,一个表示需要的新餐巾②。考虑几种边:购买边,从起点往②点连\(\inf,p\)。快洗边,从前\(m\)天往②点连\(\inf,p\)。慢洗边,从前\(n\)天往②点连\(\inf,f\)。容量限制边从②点往终点连\(r_i,0\)的边。(表示......
  • 「网络流 24 题」圆桌聚餐
    「网络流24题」圆桌聚餐上一题的简单改变,我们改一下:中间的边权值为\(1\),每个左边的点每往右流\(1\),就有人派到那张桌子,这样也不会出现同组内多个人去同一张桌子的情况(因为中间边权为\(1\))。左边源点边为人数,右边汇点边为桌子容量。code类似题:试题库......
  • P5482 [JLOI2011] 不等式组
    P5482[JLOI2011]不等式组这道题比板子还是难不少,因为有大量的分类讨论。看到题就可以考虑平衡树了。\(ax+b>c\iffax>c-b\),根据不等式乘除法的变号规则分类。\(a>0\),不等号方向不变,\(x>\dfrac{c-b}{a}\)。\(a<0\),不等号方向改变,\(x<\dfrac{c-b}{a}\)。\(a=0\),\(0>c-b\iff......
  • 稳定的牛分配
    稳定的牛分配考虑先二分答案。然后我们可以枚举区间,比如答案是3,那么区间可以是[1,3],[2,4]这样的。对于每个区间,建立区间对应的边跑网络流,所有情况下如果有一种情况是所有牛恰好都匹配成功则check成功。code ......
  • 平方
    平方题意给定\(n\)个数,然后让你拟定一个长度为\(n\)的数组\(t\),使得\(t_i>1\),且满足对于任意的\(a_i\timesa_{i+1}\timest_i\timest_{i+1}\)为完全平方数,求\(\min\prodt_i\)。\(1\len\le10^5,1\lea_i\le10^6\)。考虑质因数之间是独立的关系,我们按照每种质因......
  • 分配问题
    分配问题考虑到类似于飞行员配对问题,唯一区别就是多了一个费用,跑费用流即可。注意最长路的求法就是最短路的边权全部变成负的,然后最后负回来。code......