В общем на выходе кода получается 6 строковых элементов и 2 null. Мне нужно от них двух избавиться, но не знаю как. 2 null элемента создаются6 потому что работает expandStorage метод, то есть он автоматически расширяет список если там больше элементов, чем положено. И нужно ли мне как то дополнить мои методы класса Iterator или так тоже верно? Спасибо!
public class MyArrayList<T> {
// instance variables
private Object[] myData;
private int size; // the number of data elements in the MyArrayList
public MyArrayList() {
this.myData = new Object[5];
this.size = 0;
}
public int size() {
return this.size;
}
public void add(T element) {
if (size == myData.length)
expandStorage();
myData[size] = element;
size++;
}
public void add(int index, T element) {
// first, shuffle everything down, starting from the end
// and working our way up to "index"
for (int i = this.size; i > index; i--) {
myData[i] = myData[i-1];
}
// so now at index, we should have a spot to place our new thing
myData[index] = element;
size++;
}
public T remove(int index) {
// first, check that index is valid
if (index >= this.size)
throw new ArrayIndexOutOfBoundsException();
T temp = (T) myData[index];
for (int i = index; i < size; i++) {
myData[i] = myData[i+1];
}
size--;
return temp;
}
public T get(int index) {
return (T) myData[index];
}
private void expandStorage() {
int newsize = myData.length + (myData.length / 2) + 1;
Object[] bigger = new Object[newsize];
for (int i = 0; i < size; i++) {
bigger[i] = myData[i];
}
myData = bigger;
}
public Iterator iterator() {
return new Iterator();
}
// member (inner) class
public class Iterator implements java.util.Iterator<T> {
private int currentIndex;
// constructor
public Iterator() {
currentIndex = 0;
}
// hasNext() should return true, if there is any value left in ArrayList
// returns false if next element does not exist
public boolean hasNext() {
return currentIndex < myData.length;
// if (currentIndex < myData.length)
// return true;
// else
// return false;
}
// next() returns the element, move the iterator to the next value and so on
public T next() {
return (T) myData[currentIndex++];
}
}
} //end generic class MyArrayList
public class MyArrayListTest {
public static void main(String[] args) {
MyArrayList<String> names = new MyArrayList<>();
names.add("Java");
names.add("Python");
names.add("C++");
names.add("Swift");
names.add("Kotlin");
names.add("C#");
// for (int i = 0; i < names.size(); i++) {
// System.out.println(names.get(i));
// }
MyArrayList<String>.Iterator iterator = names.new Iterator();
while(iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}