четверг, 10 марта 2011 г.

Простая реализация итератора

Одним из паттернов проектирования является итератор - организация определенного порядка извлечения элементов из списка. Здесь показана реализация программного интерфейса, из спецификации java:
apublic class app
{
 public static void main(String[] args)
 {
   List<Human> lst=new List<Human>();
  
   lst.add(new Human("Jerry"));
   lst.add(new Human("Mary"));
   lst.add(new Human("Jon"));
     lst.add(new Human("Bluz"));
     lst.add(new Human("Jon"));
java.util.Iterator iter=  lst.getIterator();
   while (iter.hasNext()) {
    
       System.out.println(iter.next());
     }

   
 }
}
class Human
{
 String name="";
 public Human(String name)
 {
  this.name=name;
 }
 public String toString()
 {
  return super.toString()+"@name="+this.name;
 }
}
class List<T> implements java.util.Iterator
{
 private Object[] list=null;
  private int index=-1;
 private  int capacity=2;
 private  int size=0;
 public List()
 {
    init();
 }
 public List(int capacity)
 {
  this.capacity=capacity;
  init();
 }
 private void init()
 {
  list=new Object[capacity];
  size=capacity;
 }
 private void resize()
 { 
  int oldsize=size;
  size=size+capacity;
  Object[] lst=new Object[size];
  for(int i=0;i<oldsize;i++)
  {
   lst[i]=list[i];
  }
  list=lst;
  //System.out.println("===resize===");
 }
 public void add(T obj)
 {
 //System.out.println(index);
 //System.out.println(size);
  index++;
  if(index>=size)
   resize(); 
  list[index]=obj;
  
 }
   public boolean hasNext()
   {
   if (cursor == -1)
   return list.length > 0;
   return cursor < list.length;
  }
  private  int cursor;
 public java.util.Iterator getIterator()
 {
  
  cursor = -1;
  return (java.util.Iterator)this;
 }
 public Object next()
 {
  System.out.println(cursor);
  if(cursor==-1) cursor=0;
  Object nxt=list[cursor];
  cursor++;
  return nxt;
 }
 public void remove(){}
}

2 комментария:

  1. Вы же тут совсем не реализовываете паттерн Iterator - Вы просто используете java.util.Iterator. Причем делаете это в классе контейнера.

    ОтветитьУдалить
  2. Этот комментарий был удален автором.

    ОтветитьУдалить