Comparing two LinkedList<String> with ListIterator versus for loop and get(int index)
comparison, java, linked-list
Solution
As it turns out `AbstractList.equals()` (which `LinkedList` uses) will do this automatically so use that. The code is:
public boolean equals(Object o) {
if (o == this)
return true;
if (!(o instanceof List))
return false;
ListIterator<E> e1 = listIterator();
ListIterator e2 = ((List) o).listIterator();
while (e1.hasNext() && e2.hasNext()) {
E o1 = e1.next();
Object o2 = e2.next();
if (!(o1 == null ? o2 == null : o1.equals(o2)))
return false;
}
return !(e1.hasNext() || e2.hasNext());
}
So don't reinvent the wheel.
One final note: don't use `get(index)` to iterate over a `LinkedList`. It's O(n) access (O(1) for an `ArrayList`) so a `LinkedList` traversal using `get(index)` will be O(n2).
Problem
I have two LinkedList objects that are always of the same size. I want to compare them to see if they are identical in content. What are the general performance and style implications of creating a ListIterator for each list and using a while hasNext loop versus using a counter (int i) and iterating from 0 to linkedlist.size() using linkedlist.get(i) to get and compare the values? Is there a better way that I'm overlooking? The only thing I can think of is that the ListIterator method may be better in that I could more easily swap in another Comparable list later (not that I plan on it). I don't know what the two look like under the hood, so I'm not sure how I would compare them performance-wise.