zoukankan      html  css  js  c++  java
  • javable 之Iterable

    如果希望我们自己设计的ADT支持可迭代,即可以使用

    for(X x :xxxx)

    Iterator<E> ITER =xxxx.iterator();

    while(iter.hasNext()) {...};

    的方式来遍历进行一些列操作即Iterable,则可以使用Iterable 和Iterator

    这样做的好处是可以进行迭代而不需要知道ADT里面具体是如何实现的,是使用的什么样的数据结构这些都无所谓。

    Iterable接口:实现该接口的集合对象是可迭代遍历的

    public interface Iterable<T>{
      ...
      Iterator<T> iterator();
    }
    

      

    Iterator 迭代器,是一个接口 

    public interface Iterator<E>{
    
      boolean hasNext();
      E next();
      void remove();
    
    }
    

      下面给出一个具体的例子:

    	public static void main(String[] args) {
    
    		petHospital h = new petHospital();
    		Dog dog1 = new Dog(1,"Mary");
    		Dog dog2 = new Dog(3,"Elizabeth");
    		Dog dog3 = new Dog(2,"Anne Boleyn");
    		h.add(dog1);
    		h.add(dog2);
    		h.add(dog3);
    	    for(Dog d :h)
    	    {
    	    	System.out.println(d);
    	    }
    	}
    
    }
    
    
    class Dog implements Comparable<Dog>  {
    	int age;
    	String name ;
    	public Dog (int age,String name)
    	{
    		this.age=age;
    		this.name=name;
    	}
    
    	@Override
    	public int compareTo(Dog o) {
    		// TODO Auto-generated method stub
    		return (this.age>o.age)? 1:-1;
    	}
    	@Override
    	public String toString() {
    		// TODO Auto-generated method stub
    		return name+" "+age;
    	}	
    }
    class petHospital implements Iterable<Dog>
    {
    	List<Dog> dogs =new ArrayList<Dog>() ;
    	public void add(Dog d)
    	{
    		dogs.add(d);
    	}
    	@Override
    	public Iterator<Dog> iterator() {
    		// TODO Auto-generated method stub
    		return new petHospitalIterator();
    	}
    	private class petHospitalIterator implements Iterator<Dog> {
    	    // 当前迭代元素的下标
    	    private int index = 0;
    
    	    // 判断是否还有下一个元素,如果迭代到最后一个元素就返回false
    	    public boolean hasNext() {
    	        return index != dogs.size();
    	    }
    
    	    @Override
    	    public Dog next() {
    	        return dogs.get(index++);
    	    }
    
    	    // 这里不支持,抛出不支持操作异常
    	    public void remove() {
    	        throw new UnsupportedOperationException();
    	    }
    	}
    

      

  • 相关阅读:
    js练习题2
    js样式
    js小练习
    css动画样式
    css盒子、布局样式
    css一般样式
    css样式、选择器
    html表格、表单
    html 标签
    mysql连接查询,子查询,联合查询
  • 原文地址:https://www.cnblogs.com/blairwaldorf/p/9201127.html
Copyright © 2011-2022 走看看