Вот мой внутренний класс, который реализует Iterator:Реализация Java итератора и Iterable интерфейс над Object [] массив
public class myIterator implements Iterator<Object> {
private int pos = 0;
public boolean hasNext(){
return pos < arrayPal.length;
}
public Object next(){
return arrayPal[pos++];
}
}
В классе, что этот внутренний класс находится в пределах, DynArray, (который является объектом, имеет внутренний массив с именем arrayPal любого типа объекта, а также логическое значение, которое говорит, может ли массив хранить нулевые значения) Я хочу использовать итератор для моего метода добавления
public void add(T ele) {
int counter =0;
int tempIndex =0;
if(ele == null && this.allowed == false){
throw new NullPointerException("This array does not accept null values!");
}
else{
myIterator iterator = new myIterator();
Iterator<T> it = this.iterator();
for(Object o: this.arrayPal){
System.out.print(it.hasNext());
if(it.hasNext() == false && (this.arrayPal.length-1) > counter){
arrayPal[counter+1] = ele;
}
else if (it.hasNext() == false && (arrayPal.length-1) == counter){
//expand the array by quanta
//add the the first newest index
Object[] temp = new Object[this.arrayPal.length + quanta];
for(Object b: this.arrayPal){
temp[tempIndex++] = b;
}
temp[this.arrayPal.length] = ele;
this.arrayPal = temp;
}
counter++;
}
}
Однако. hasNext() возвращает true даже для последнего элемента в моем списке. Почему это?
Кроме того, он не позволит мне делать this.arrayPal.iterator() он говорит:
не может вызывать итератор() на тип массива Object []
Почему нет?
Непонятно, как итератор должен быть связан с методом добавления. Кроме того, вы не можете добавлять методы в Java к типам, которые вы не контролируете, включая 'Object []'. Вы можете добавлять только методы, например. классы, такие как 'DynArray', которые вы пишете. –
Вы никогда не называете 'it.next()' - это намеренно? –
Когда я его назвал.next()? это заставляет итератор делать шаг? – Jenny