diff options
Diffstat (limited to 'labs/lab09_iterator')
| -rw-r--r-- | labs/lab09_iterator/Iterator.java | 7 | ||||
| -rw-r--r-- | labs/lab09_iterator/SListIterator.java | 88 | ||||
| -rw-r--r-- | labs/lab09_iterator/SListIteratorTester.java | 83 | ||||
| -rw-r--r-- | labs/lab09_iterator/lab09_iterator.pdf | bin | 0 -> 60451 bytes |
4 files changed, 178 insertions, 0 deletions
diff --git a/labs/lab09_iterator/Iterator.java b/labs/lab09_iterator/Iterator.java new file mode 100644 index 0000000..4d64f9e --- /dev/null +++ b/labs/lab09_iterator/Iterator.java @@ -0,0 +1,7 @@ + +public interface Iterator<T> +{ + public boolean hasNext(); + public T next(); + public T remove(); +} diff --git a/labs/lab09_iterator/SListIterator.java b/labs/lab09_iterator/SListIterator.java new file mode 100644 index 0000000..e58ea6d --- /dev/null +++ b/labs/lab09_iterator/SListIterator.java @@ -0,0 +1,88 @@ +import java.util.NoSuchElementException; + + +public class SListIterator<T> +{ + private Node firstNode; + private int numberOfEntries; + + public SListIterator() + { + firstNode = null; + numberOfEntries = 0; + } + + public void addToFirst(T aData) + { + firstNode = new Node(aData, firstNode); + numberOfEntries++; + } + + public T getEntry(int givenPosition) + { + T result = null; + + if((givenPosition >= 1) && (givenPosition <= numberOfEntries)) + { + result = (getNodeAt(givenPosition)).data; + } + + return result; + } + + private Node getNodeAt(int givenPosition) + { + Node currentNode = firstNode; + + for(int counter = 1; counter < givenPosition; counter++) + { + currentNode = currentNode.next; + } + + return currentNode; + } + + public Iterator<T> getIterator() + { + return new IteratorForSList(); + } + + private class IteratorForSList implements Iterator<T> + { + Node node; + + private IteratorForSList() + { + node = firstNode; + } + + public boolean hasNext() + { + return node != null; + } + + public T next() + { + T temp = node.data; + node = node.next; + return temp; + } + + public T remove() + { + throw new UnsupportedOperationException("remove() is not supported by this iterator"); + } + } + + private class Node + { + private T data; + private Node next; + + private Node(T aData, Node nextNode) + { + data = aData; + next = nextNode; + } + } +} diff --git a/labs/lab09_iterator/SListIteratorTester.java b/labs/lab09_iterator/SListIteratorTester.java new file mode 100644 index 0000000..b6960b5 --- /dev/null +++ b/labs/lab09_iterator/SListIteratorTester.java @@ -0,0 +1,83 @@ +import java.util.Random; + +public class SListIteratorTester +{ + public static void main(String[] args) + { + // Construct a list and add entries + + int numberOfData = 50000; // number of data to add to the list + int maxDataValue = 10; // number of different values to add to the list + int[] getEntryArray = new int[numberOfData]; + int[] iteratorArray = new int[numberOfData]; + + SListIterator<Integer> list = new SListIterator<Integer>(); + + Random rand = new Random(); + rand.setSeed(System.nanoTime()); + + System.out.print("Adding data into the list: "); + + for(int i = 0; i < numberOfData; i++) + { + list.addToFirst(rand.nextInt(maxDataValue)); + } + + System.out.println("Done"); + + System.out.print("Dry run for the method getEntry(): "); + for(int i = 1; i <= 10; i++) + { + list.getEntry(i); + } + System.out.println("Done"); + + + double startTime; // Start time millisecond + double endTime; // End time millisecond + + System.out.print("Time the method getEntry(): "); + + // Timing the method getEntry() + + startTime = System.currentTimeMillis(); + + for(int i = 1; i <= numberOfData; i++) + { + getEntryArray[i - 1] = list.getEntry(i); + } + + endTime = System.currentTimeMillis(); + System.out.println("Done"); + double getEntryTime = endTime - startTime; + + System.out.print("Time the iterator: "); + + Iterator<Integer> iterator = list.getIterator(); + + startTime = System.currentTimeMillis(); + + int index = 0; + + while(iterator.hasNext()) + { + iteratorArray[index] = iterator.next(); + index++; + } + + endTime = System.currentTimeMillis(); + System.out.println("Done"); + double iteratorTime = endTime - startTime; + + for(int i = 0; i < numberOfData; i++) + { + if(getEntryArray[i] != iteratorArray[i]) + { + System.out.println("There is something wrong with your iterator."); + } + } + + System.out.println("The method getEntry() took " + getEntryTime + " milliseconds."); + System.out.println("Using iterator took " + iteratorTime + " milliseconds."); + } +}
\ No newline at end of file diff --git a/labs/lab09_iterator/lab09_iterator.pdf b/labs/lab09_iterator/lab09_iterator.pdf Binary files differnew file mode 100644 index 0000000..c9a43f1 --- /dev/null +++ b/labs/lab09_iterator/lab09_iterator.pdf |
