java - 模式迭代器

标签 java design-patterns iterator

我有一个任务,其中包括模式实现(迭代器)以及在先前创建的类 Hotel 和 Tours 中添加方法 iterator()。不幸的是,我对 Java 还很陌生,所以我不知道如何使用 IIterator 中的方法进行 arraylist 内部。信息-界面

public class IIterator<T> implements Iterator<T> {

    private Object elements;
    int index = 0;


    public boolean hasNext() {
        return index< Array.getLength(elements);
    }
    public T next() {
        return (T) Array.get(elements, index++);
    }
    public void remove() {
        throw new UnsupportedOperationException("remove");
    }
}
public class Hotel implements Info, Serializable, Cloneable, Comparable{
    public Iterator iterator() {
        return new IIterator();
    }
}
public class Tours implements Info, Serializable, Cloneable, Comparable{
    public Iterator iterator() {
        return new IIterator();
    }
}

ArrayList<Info> inter = new ArrayList();
        inter.add(new Hotel("Lara", 100, 5));
        inter.add(new Hotel("Katya", 10, 1));
        inter.add(new Tours("Lara", 1000, length));
        inter.add(new Tours("HelsinkiPanorama", 1010, length));

最佳答案

已编辑

你可以这样做:

    for (Info info : inter) {
        System.out.println(info.getString());
    }

    Iterator<Info> it = inter.iterator();
    while (it.hasNext()){
        System.out.println(it.next().getString());
    }
<小时/>

上一个答案

我不确定你的问题,但如果你想要一个简单的迭代器示例,你可以看到这个:

public class Hotel {

    private String name;

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

    public String getName() {
        return name;
    }
}

public class Tours implements Iterable<Hotel>{

    private List<Hotel> hotels = new ArrayList<>();

    public void addHotel(Hotel  hotel){
        hotels.add(hotel);
    }

    @Override
    public Iterator<Hotel> iterator() {
        return hotels.iterator();
    }        
}

示例:

public static void main(String[] args) {
    Tours tours = new Tours();
    tours.addHotel(new Hotel("hotel-0"));
    tours.addHotel(new Hotel("hotel-1"));
    tours.addHotel(new Hotel("hotel-2"));
    tours.addHotel(new Hotel("hotel-3"));

    for (Hotel hotel : tours) {
        System.out.println(hotel.getName());
    }
}

它打印:

hotel-0
hotel-1
hotel-2
hotel-3

如果您想查看底层示例

public class Tours implements Iterable<Hotel>{

    private int numHotels = 0;
    private Hotel[] hotels = null;

    public void addHotel(Hotel  hotel){
        if (hotels == null){
            hotels = new Hotel[5];
        } else if ( numHotels + 1 >= hotels.length){
            hotels = Arrays.copyOf(hotels, numHotels + 5);
        }
        hotels[numHotels++] = hotel;
    }

    @Override
    public Iterator<Hotel> iterator() {
        return new HotelIterator();
    }

    private class HotelIterator implements Iterator<Hotel> {
        private int index = 0;

        @Override
        public boolean hasNext() {
            return index < numHotels;
        }

        @Override
        public Hotel next() {
            return hotels[index++];
        }
    }
}

示例2:

public static void main(String[] args) {
    Tours tours = new Tours();
    tours.addHotel(new Hotel("hotel-0"));
    tours.addHotel(new Hotel("hotel-1"));
    tours.addHotel(new Hotel("hotel-2"));
    tours.addHotel(new Hotel("hotel-3"));

    for (Hotel hotel : tours) {
        System.out.println(hotel.getName());
    }
}

它打印:

hotel-0
hotel-1
hotel-2
hotel-3

关于java - 模式迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47593745/

相关文章:

java - 带字符串的 Android NumberPicker

c++ - 设计模式,对象的 vector ,每一种都有两种可能的类型

loops - 为什么我不能在两个不同的映射函数中可变地借用变量?

java - 显示用户输入的最小值和最大值并查找平均值

java - 使用 NetBeans JPA 额外的 "entityPK"类从数据库生成实体?

java - 连接到安全的 websocket

design-patterns - 向导用户界面的设计模式

java - 我如何必须返回 Iterator<E> 的 "next"方法?

java - 如何使用 JPA 将 BigInteger 存储在 H2/PSQL 数据库中?

java - 在不知 Prop 体类型的情况下实例化对象