Question: public class ArrayList > implements List { private boolean isSorted; T[] a; private int noOfElements; @SuppressWarnings(unchecked) public ArrayList() { noOfElements = 0; a = (T[])
![public class ArrayList> implements List { private boolean isSorted; T[] a;](https://s3.amazonaws.com/si.experts.images/answers/2024/08/66d1c78d07af6_14066d1c78c6b64a.jpg)

![(T[]) new Comparable[2]; isSorted = true; } @Override public boolean add(T element)](https://s3.amazonaws.com/si.experts.images/answers/2024/08/66d1c78e90d9b_14266d1c78e03f3e.jpg)
public class ArrayList> implements List
{
private boolean isSorted;
T[] a;
private int noOfElements;
@SuppressWarnings("unchecked")
public ArrayList()
{
noOfElements = 0;
a = (T[]) new Comparable[2];
isSorted = true;
}
@Override
public boolean add(T element) {
if(element==null)
return false;
else
{
int i=0;
while(a[i] != null && i
i++;
if(a[i] == null)
a[i] = element;
else if(i == a.length)
{
a = newArray();
a[i] = element;
noOfElements++;
}
isSorted = false;
return true;
}
}
@Override
public boolean add(int index, T element) {
if(element == null)
return false;
else
{
if(index = a.length) // index out of bounds
return false;
if(a[index] == null)
a[index] = element;
else
{
int i;
if(a[size() - 1] != null) // if last element is not null, means array is full
{
a = newArray();
i = size()/2;
}
else
i = noOfElements - 1;
while(i != index)
{
a[i] = a[i-1];
i--;
}
a[i] = element;
noOfElements++;
}
isSorted = false;
return true;
}
}
@Override
public void clear() {
for(int i = 0 ; i
a[i] = null;
noOfElements = 0;
}
@Override
public boolean contains(T element) {
for(int i=0;i if(a[i]==element)
return true;
return false;
}
@Override
public T get(int index) {
if(index = a.length)
return null;
else
return a[index];
}
@Override
public int indexOf(T element) {
for(int i=0;i if(a[i]==element)
return i;
return -1;
}
@Override
public boolean isEmpty() {
if(noOfElements == 0)
return true;
return false;
}
@Override
public int lastIndexOf(T element) {
for(int i = noOfElements-1 ; i >= 0 ; i--)
if(a[i] == element)
return i;
return -1;
}
@Override
public T set(int index, T element) {
if(element == null || index = a.length)
return null;
T temp = a[index];
a[index] = element;
return temp;
}
@Override
public int size() {
return noOfElements;
}
@Override
public void sort(boolean order) {
if(!isSorted)
{
if(order) // ascending
{
}
else // descending
{
}
}
else
{
if(!order) // descending
{
}
}
}
@Override
public boolean remove(T element) {
int i=0;
while(i
{
if(a[i] == element)
{
int j = i;
while(j
{
a[j] = a[j+1];
j++;
}
return true;
}
i++;
}
return false;
}
@Override
public T remove(int index) {
if(index = a.length)
return null;
T temp = a[index];
int i=0;
while(i
{
if(i == index)
{
int j = i;
while(j
{
a[j] = a[j+1];
j++;
}
return temp;
}
}
return null;
}
@SuppressWarnings("unchecked")
private T[] newArray()
{
int size = 2*a.length;
T[] array = (T[])new Comparable[size];
for(int i=0;i array[i] = a[i];
return array;
}
In addition to the methods described in the List interface, the LinkedList class should contain a private class variable isSorted. This should be initialized to true in the constructor (because it is sorted if it has no elements) and updated when the list is sorted, or more elements You may implement your linked list as a headed list, i.e., the first node in the list is a 'dummy' node and the second node is the first element of the list, or a non-headed list, i.e., the first node is the first element of the list. Depending on how you choose to implement your list, there will be some small nuances. CSCI 1933 PROJECT 3 Due: Friday, March 23th, 2018 are added or set. For the purposes of this class, isSorted is only true if the list is sorted in ascending order Initially and after a call to clear ), the size should be zero and your list should be empty . In sort (), do not use an array or ArrayList to sort the elements. You are required to sort the values using only the linked list data structure. You can move nodes or swap values but you cannot use an array to store values while sorting. Depending on your implementation, remember that after sorting, the former first node may not be the current first node. After you have implemented your LinkedList class, include junit tests that test all functionality. 2 An Elephant Herd Slightly modify your class ElephantHerd from Project 2 to use an underlying LinkedList rather than an ArrayList. Then verify that the methods still work as intended. If you did the previous project correctly, this step should only require the modification of one line of code In addition to the methods described in the List interface, the LinkedList class should contain a private class variable isSorted. This should be initialized to true in the constructor (because it is sorted if it has no elements) and updated when the list is sorted, or more elements You may implement your linked list as a headed list, i.e., the first node in the list is a 'dummy' node and the second node is the first element of the list, or a non-headed list, i.e., the first node is the first element of the list. Depending on how you choose to implement your list, there will be some small nuances. CSCI 1933 PROJECT 3 Due: Friday, March 23th, 2018 are added or set. For the purposes of this class, isSorted is only true if the list is sorted in ascending order Initially and after a call to clear ), the size should be zero and your list should be empty . In sort (), do not use an array or ArrayList to sort the elements. You are required to sort the values using only the linked list data structure. You can move nodes or swap values but you cannot use an array to store values while sorting. Depending on your implementation, remember that after sorting, the former first node may not be the current first node. After you have implemented your LinkedList class, include junit tests that test all functionality. 2 An Elephant Herd Slightly modify your class ElephantHerd from Project 2 to use an underlying LinkedList rather than an ArrayList. Then verify that the methods still work as intended. If you did the previous project correctly, this step should only require the modification of one line of code