Question
instruction: Consider a member method keepEven for the List ADT. This method modifies the current list and only keeps the elements in the even positions
instruction: Consider a member method keepEven for the List ADT. This method modifies the current list and only keeps the elements in the even positions (i.e., 0, 2, 4, ...). The method returns the number of elements in odd positions that were discarded. Implement this method for the ArrayList class. For example, if L = {Jim, Ned, Ron, Bob, Kim}, then L.keepEven() sets L = {Jim, Ron, Kim} and returns 2 because it removed Ned and Bob.
import java.util.Iterator; import java.util.NoSuchElementException; public class Quiz3bWrapper { public static interface List extends Iterable { public int size(); public boolean isEmpty(); public boolean isMember(E e); public int firstIndexOf(E e); public int lastIndexOf(E e); public void add(E e); public void add(E e, int position); public E get(int position); public E remove(int position); public E replace(int position, E newElement); public void clear(); public Object[] toArray(); public int keepEven(); } @SuppressWarnings("unchecked") public static class ArrayList implements List { @SuppressWarnings("hiding") private class ArrayListIterator implements Iterator { private int currentPosition; public ArrayListIterator() { super(); this.currentPosition = 0; } @Override public boolean hasNext() { return this.currentPosition < currentSize; } @Override public E next() { if (this.hasNext()) { E result = (E) elements[this.currentPosition++]; // elements is array in enclosing class return result; } else { throw new NoSuchElementException(); } } } private E[] elements; private int currentSize; private static final int DEFAULT_SIZE = 10; public ArrayList(int initialSize) { if (initialSize < 1) { throw new IllegalArgumentException("Size must be at least 1."); } this.elements = (E[]) new Object[initialSize]; this.currentSize = 0; } public ArrayList() { this(DEFAULT_SIZE); } @Override public int size() { return this.currentSize; } @Override public boolean isEmpty() { return this.size() == 0; } @Override public boolean isMember(E e) { return this.firstIndexOf(e) >= 0; } @Override public int firstIndexOf(E e) { for (int i=0; i < this.size(); ++i) { if (this.elements[i].equals(e)) { return i; } } return -1; } @Override public void add(E e) { if (this.size() == this.elements.length) { this.reAllocate(); } this.elements[this.currentSize++] = e; } private void reAllocate() { E[] temp = (E[]) new Object[2*this.size()]; for (int i=0; i < this.size(); ++i) { temp[i] = this.elements[i]; } this.elements = temp; } @Override public void add(E e, int position) { if ((position < 0) || (position > this.currentSize)){ throw new IndexOutOfBoundsException("Illegal position"); } if (position == this.currentSize) { this.add(e); } else { if (this.size() == this.elements.length) { this.reAllocate(); } for (int i=this.currentSize; i > position; --i) { this.elements[i] = this.elements[i-1]; } this.elements[position] = e; this.currentSize++; } } @Override public E get(int position) { if ((position < 0) || (position >= this.currentSize)) { throw new IndexOutOfBoundsException("Illegal position"); } return this.elements[position]; } @Override public E remove(int position) { if ((position < 0) || (position >= this.currentSize)) { throw new IndexOutOfBoundsException("Illegal position"); } E result = this.elements[position]; for (int i=position; i < this.size() - 1; ++i) { this.elements[i] = this.elements[i + 1]; } this.elements[this.currentSize-1] = null; this.currentSize--; return result; } @Override public E replace(int position, E newElement) { if ((position < 0) || (position >= this.currentSize)) { throw new IndexOutOfBoundsException("Illegal position"); } E result = this.elements[position]; this.elements[position] = newElement; return result; } @Override public void clear() { while(!this.isEmpty()) { this.remove(0); } } @Override public Object[] toArray() { Object[] result = (E[]) new Object[this.size()]; System.arraycopy(this.elements, 0, result, 0, this.size()); // for (int i=0; i < this.size(); ++i) { // result[i] = this.elements[i]; // } return result; } @Override public Iterator iterator() { return new ArrayListIterator(); } @Override public int lastIndexOf(E e) { for (int i=this.currentSize-1; i>= 0; --i) { if (this.elements[i].equals(e)) { return i; } } // not found return -1; } @Override public int keepEven() { // ADD YOUR CODE HERE } } }
Step by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started