1

演習の一環として、列挙型をサポートするArrayListを実装しています。

以下は、イテレーターを列挙型に変換するアダプターです。

public class MyEnumeratorAdapter<Object> implements Enumeration<Object> {

    private Iterator<Object> adaptee;

    public MyEnumeratorAdapter(Iterator<Object> it) {
        this.adaptee = it;
    }

    @Override
    public boolean hasMoreElements() {
        return adaptee.hasNext();
    }

    @Override
    public Object nextElement() {
        return adaptee.next();
    }

}

私のarraylistクラスは次のとおりです。

public class MyArrayList<Object> extends ArrayList<Object> {

    public MyArrayList() {
        this.enumerator = new MyEnumeratorAdapter<Object>(this.iterator());
    }

    public Enumeration<Object> enumerator() {
        return this.enumerator;

    }

    public boolean hasMoreElements() {
        return this.enumerator.hasMoreElements();
    }

    public Object nextElement() {
        return this.enumerator.nextElement();
    }

    private static final long serialVersionUID = 1L;

    private Enumeration<Object> enumerator;

}

ただし、次のコードでこのテストを実行すると、java.util.ConcurrentModificationExceptionが発生します。

public static void main(String[] args) {
        MyArrayList<String> names = new MyArrayList<String>();
        names.add("jim");
        names.add("jack");
        names.add("jai");

        for (Enumeration<String> iterator = names.enumerator(); iterator
                .hasMoreElements();) {
            String name = (String) iterator.nextElement();
            System.out.println(name);
        }

    }

私はどんな間違いをしているのですか?

列挙型をサポートするArrayListクラスを使用できますか?

4

2 に答える 2

2

MyArrayListいくつかの問題があります:

  1. Iteratorサイズがゼロの配列リストを作成します。列挙子を呼び出すたびに、新しいイテレータを作成する必要があります
  2. Enumerableのメソッドを直接実装しますMyArrayList
  3. ジェネリックを適切に使用していません

このクラスはこれらの問題を修正する必要があります。

public class MyArrayList<T> extends ArrayList<T> {

    public Enumeration<T> enumerator() {
        return new MyEnumeratorAdapter(this.iterator());
    }
}
于 2009-08-29T16:06:18.897 に答える
1

あなたは同じものIteratorを繰り返し使用することになります。毎回新しいものが必要です(毎回新しいものを作成することによってEnumeration)。

于 2009-08-29T16:03:14.190 に答える