I recently had a discussion with a collegue why the List interface in Java doesn’t have a head()
and tail()
method.
In order to implement such a functionality would have to write a wrapper that looked something like this:
public E head() { if (underlyingList == null || underlyingList.isEmpty()) return null; return underlyingList.get(0); } public E tail() { if (underlyingList == null || underlyingList.isEmpty()) return null; return underlyingList.get(underlyingList.size()-1); }
I’m not aware of all List implementations but I assume that at least in LinkedList and ArrayList it should be pretty trivial to get the last and first element (constant time).
So the question is:
Is there a specific reason why it is not a good idea to provide a tail method to any List implementation?
Advertisement
Answer
Java Collections Framework is written by Joshua Bloch. One of his API design principles is: High power-to-weight ratio.
tail()
and head()
can be implemented by get()
and size()
, so it’s not necessary to add tail()
and head()
to a very general interface java.util.List
. Once users use the methods, you don’t have chance to remove them and you have to maintain these unnecessary methods forever. That’s bad.