Прежде всего, я понимаю, что ваши данные находятся внутри elementData, а размер дает количество элементов, хранящихся внутри.
iterator () дает вам итератор. Ваша реализация Iterator имеет индекс как указатель на текущий элемент.
Что вы планируете хранить внутри индекса? Я вижу 2 возможности:
а) он дает вам текущее местоположение данных. Первый элемент в массиве - это элемент 0, поэтому до этого я бы инициализировал его как -1.
б) Это может быть визуально. Таким образом, он инициализируется как 0 сначала, а затем 1 означает: первый элемент, который будет elementData [0].
==> Это просто внутренняя переменная, поэтому она полностью зависит от вас, что вы хотите хранить внутри нее.
Теперь давайте посмотрим на ваш метод hasNext. Если sizer равен 0, тогда не может быть следующего элемента. Хорошо. Но тогда вы проверяете, является ли iterator () пустым? Итератор всегда возвращает новый экземпляр вашего внутреннего класса итератора. Так что это всегда будет ненулевым! Так что это кажется неправильным.
У вас есть индекс и размер. Так что вам просто нужно проверить, указывает ли индекс уже на последний элемент. Так что в зависимости от выбора a / b выше, вы просто должны проверить, если index + 1
А потом следующая функция:
- Это должно подтвердить, что есть еще один элемент. (=> hasNext)
- вы увеличиваете индекс
- вы возвращаете элемент, на который указывает указатель (elementData [index] или elementData [index-1] (снова зависит от вашего решения, что хранить внутри индекса)
Мой совет - поиграть с ним с бумагой и ручкой. Просто напишите экземпляр вашего класса, например, 3 элемента (т.е. elementData [0], elementData [1], elementData [2] имеет некоторое значение, размер = 3). Вы создаете новый экземпляр вашего итератора, индекс инициализируется, а затем смотрите, что должно произойти.
Возможный класс, который показывает реализацию:
import java.util.Iterator;
public class MaxHeapPriorityQueue<E extends Comparable<E>> {
private E[] elementData;
private int size;
@SuppressWarnings("unchecked")
public MaxHeapPriorityQueue() {
elementData = (E[]) new Comparable[10];
size = 0;
}
public void add(E data) {
if (size == 10) throw new IllegalStateException("Queue full");
elementData[size] = data;
size++;
}
public Iterator<E> iterator() {
return new MHPQIterator();
}
public class MHPQIterator implements java.util.Iterator<E>
{
private int index=-1;
public boolean hasNext()
{
return (index+1)<size;
}
public E next()
{
index++;
return elementData[index];
}
}
public static void main (String[] args) {
MaxHeapPriorityQueue<Integer> queue = new MaxHeapPriorityQueue<>();
Iterator<Integer> iterator = queue.iterator();
System.out.println("Empty queue:");
while (iterator.hasNext())
System.out.println(iterator.next());
queue.add(1);
System.out.println("Queue with 1 element (1):");
iterator = queue.iterator();
while (iterator.hasNext())
System.out.println(iterator.next());
queue.add(2);
queue.add(3);
queue.add(4);
System.out.println("Queue with 4 elementa (1,2,3,4):");
iterator = queue.iterator();
while (iterator.hasNext())
System.out.println(iterator.next());
}
}