将Iterator添加到集合中

时间:2012-07-09 20:24:46

标签: java

以下是我的学习目标。我开始了,但我真的不知道从哪里开始实施主程序。我将不胜感激任何帮助!

目标:

  • 将Iterator对象添加到卡片集合
  • 通过创建私有内部类将迭代器添加到集合中。
  • 您可以使用任何适当的内部类类型
  • 枚举器和迭代器使用大数字来确定集合何时更改。
  • 为与Java API一致的类实现正确的方法,接口和扩展适当的类。

    public class CardCollection {
    
    private ArrayList<Card> cards;
    private ArrayList<Note> notes;
    
    public CardCollection() { //constructor initializes the two arraylists
      cards = new ArrayList<Card>();
      notes = new ArrayList<Note>();
     }
    
    private class Card implements Iterable<Card> { //create the inner class
    
        public Iterator<Card> iterator() { //create the Iterator for Card
            return cards.iterator();
        }
    }
    
    private class Note implements Iterable<Note> { //create the inner class
    
        public Iterator<Note> iterator() { //create the Iterator for Note
            return notes.iterator();
        }
    
    }
    
    public Card cards() {
        return new Card();
     }
    
     public Note notes() {
         return new Note();
     }
    
     public void add(Card card) {
         cards.add(card);
     }
    
     public void add(Note note) {
         notes.add(note);
     }
    
    }
    

2 个答案:

答案 0 :(得分:2)

这里有两个概念,我认为你可能会混淆。如果可以迭代一些内部元素,则为Iterable对象。

因此,如果我有一个带有物品的购物车,我可以迭代我的杂货。

public class ShoppingCart implements Iterable<GroceryItem>
{
   public Iterator<GroceryItem> iterator()
   {
      // return an iterator
   }
}

因此,为了使用此功能,我需要提供一个Iterator。在您的代码示例中,您将重用ArrayList中的迭代器。从您的练习说明中,我相信您需要自己实施一个。例如:

public class GroceryIterator implements Iterator<GroceryItem>
{
  private GroceryItem[] items;
  private int currentElement = 0;

  public GroceryIterator(GroceryItem[] items)
  {
    this.items = items;
  }

  public GroceryItem next() // implement this
  public void remove() // implement this
  public boolean hasNext() // implement this
}

所以我给你一个构造函数/成员变量的提示。在创建此类之后,您的Iterable类(我的ShoppingCart)将返回我的新迭代器。

作业建议为自定义迭代器使用私有内部类。

祝你好运

答案 1 :(得分:1)

  • 可迭代对象通常是集合。使用CardCollection比使用Card
  • 更适合
  • 公共方法cards()和notes()返回类型Card和Note是私有的。我认为那些是公开的。
  • 我认为方法cards()和notes()意味着返回迭代器。