如何返回列表中元素的列表迭代器

时间:2012-03-09 04:11:50

标签: java

这是我不明白的事情,我的教授本周很忙,所以我不能问她。有人可以向我解释如何设置列表迭代器,并使用它来返回ArrayList中的元素吗?谢谢。它是方法“public Iterator iterator()”,我已经尽力了,但我无法完成它。

public class ArrayList<E> implements List<E> {
private E[] elementData;
private int elementCount;
private int capacityIncrement;
private static final int INVALID_INDEX=-1;
private static final int DEFAULT_CAPACITY = 100;

public ArrayList() {

    capacityIncrement = 0;
    elementData = (E[]) new Object[DEFAULT_CAPACITY];


}

public ArrayList(int capacity) {

    this.capacityIncrement = 0;
    this.elementData = (E[]) new Object[capacity];


}

public ArrayList(int capacity, int increment) {

    this.capacityIncrement = increment;
    this.elementData = (E[]) new Object[capacity];

}

public int size() {
    return elementCount;

}

public boolean isEmpty() {
    if (elementCount != 0) return false;
    else return true;
}

public void clear() {
        elementCount = 0;

}

public boolean contains(E element) { //check back
    for (int i = 0; i < elementCount; i++) {
        if (elementData[i].equals(element)) return true; //== vs. .equals
    }
    return false;
}

public void add(E element) {
    elementCount++;
    elementData[elementCount] = element;
}

public boolean remove(E element) {
    for (int i = 0; i < elementCount; i++) { //while vs. loop
        if (elementData[i].equals(element)) {
            for (int j = 0; j <= (elementCount - i); j++){
            elementData[i] = elementData[i++];
            elementCount = elementCount - 1;
            return true;
            }


        }

    }
    return false;
}

public E elementAt(int index) {

    return elementData[index]; //elementdata vs. elementcount
}

public int indexOf(E element) {


    for (int i = 0; i < elementCount; i++) //while vs. loop
        if (elementData[i].equals(element)) {
            return i;

        } return INVALID_INDEX;


}

public void insertElementAt(E element, int index) {
    elementCount = elementCount + 1;
    for (int i = index; i < elementCount; i++) {
        elementData[i++] = elementData[i];
    }
    elementData[index] = element;
     //shift right (look at notes)
}

public void removeElementAt(int index) {
    for (int i = index; i < elementCount; i++) {
        elementData[i] = elementData[i++];

    }
    elementCount = elementCount - 1;
}

public void setElementAt(E element, int index) {

    elementData[index] = element;
}

public void removeDuplicates() {

    for (int i = 0; i < elementCount; i++) {
        for (int j = 0; j < elementCount; j++) {
            if (elementData[i].equals(elementData[j])) {
                elementData[i] = elementData[i++];
                elementCount = elementCount - 1;
            }
        }
    }
}

public void trimToSize() { //don't need to add trims to removing methods??



}

public Iterator<E> iterator() {
     Iterator itr = new list.iterator();
     while (itr.hasNext()) {

     }
    /**
 *
 * @return  a list iterator of the elements
 * in this list (in proper sequence).
 */

}

public Iterator<E> iterator(int index) {
    throw new UnsupportedOperationException("Not supported yet.");
}



private static class ArrayListIterator<E> implements Iterator<E> {
    private ArrayListIterator(ArrayList c) {
      /**
      * Returns a list iterator of the elements in this list (in proper sequence).
      * @param c list to be iterated upon
      */
        elementData=c;

    }


 }

 }

2 个答案:

答案 0 :(得分:1)

Iterator只是一个接口,它指定一个实现类必须提供next()和hasNext()。

简单的第一个切割实现是使您的数组列表实现Iterator接口。

您可以添加“currentIndex”成员和类似

的方法
Iterator<E> iterator() { return this; }

next()和hasNext()将根据需要使用currentIndex和数组大小。

显然,如果你想在同一个集合中拥有多个迭代器,这会中断,所以下一步就是将迭代器内容重构为一个单独的类。

答案 1 :(得分:0)

public Iterator iterator()方法中,您将返回一个迭代器。所以

public Iterator<E> iterator() {
    return this.iterator();
}

将完成这项工作。

相关问题