//**************************************************************//
//***************Iterators - November 2nd, 2016****************//
//************************************************************//
Prof. Simpkins is sick, so we get Taylor teaching today instead
----------------------------------------------------------------
-Comparable / Comparator: know that these are TWO DIFFERENT THINGS
-Comparable is an interface that, when implemented, allows it to be compared to any other object that implements "Comparable"
-Defines a default - or NATURAL - ordering
-COMPARATOR is a tool to define a different way of sorting things (e.g., by 2 criteria)
-All collections are, by default, ITERABLE; i.e., we can call a "for-each" loop on it
-how does it know how to cycle through these collections? By how we implement the "Iterable" interface
-Why is this necessary? Why can't we just go to the next one? Because Collections AREN'T NEXT TO EACH OTHER IN MEMORY; they're stored in separate data structures, so the compiler can't tell what order everything is in by itself
-The Iterable interface has 1 sub-interface: "Iterator", which has 3 methods (2 that we care about):
-"hasNext()"; tells us if there's still another element in the collection
-"next()"; returns the next element
-"remove()": default method as of Java 8, so we don't need to worry about this any more; removes the most recently returned element
-ALWAYS call hasNext() before calling next()
e.g. "while (Collector.hasNext()) {
object x = Collector.next();
}"
-Should usually have a counter variable for what the next element is in the backing structure; e.g.
"public boolean hasNext() {
return counter > 0;
}
public E next() {
if(hasNext()) {
E next = get(counter);
counter--;
return next;
}
}"
-Not too hard conceptually, but if it is, it's VERY straightforward in practice