Java collections design question:  why standalone methods in Collections?  why not add to the list interface?
For all the methods in Collections that take a List as their first argument, why aren't those methods simply part of the List interface?

I'm trying to better understand the design decisions behind the Java collections framework.

Compare [java.util.Collections][1] and [java.util.List][2].  Why were some methods placed as static standalone methods in the Collections class, instead of being added to the List interface (and presumably thus implemented by some existing or would-be base class)?

My (naive?) intuition is, given a List object, that object itself should "know" how to perform on itself operations such as rotate(), shuffle(), or reverse().  Instead, as a programmer, I have to review both the methods in the List interface, as well as the static methods "over there" in the Collections class, to ensure I'm using a canonical solution.

Is there some compelling OO design principle here that I'm overlooking?  Or was this distinction done simply for some practical, performance reason?

  [1]: http://java.sun.com/javase/6/docs/api/java/util/Collections.html
  [2]: http://java.sun.com/javase/6/docs/api/java/util/List.html
Java collections design question:  why standalone methods in Collections?  why not add to the list interface?
===

For all the methods in Collections that take a List as their first argument, why aren't those methods simply part of the List interface?

I'm trying to better understand the design decisions behind the Java collections framework.

Compare [java.util.Collections][1] and [java.util.List][2].  Why were some methods placed as static standalone methods in the Collections class, instead of being added to the List interface (and presumably thus implemented by some existing or would-be base class)?

My (naive?) intuition is, given a List object, that object itself should "know" how to perform on itself operations such as rotate(), shuffle(), or reverse().  Instead, as a programmer, I have to review both the methods in the List interface, as well as the static methods "over there" in the Collections class, to ensure I'm using a canonical solution.

Is there some compelling OO design principle here that I'm overlooking?  Or was this distinction done simply for some practical, performance reason?

  [1]: http://java.sun.com/javase/6/docs/api/java/util/Collections.html
  [2]: http://java.sun.com/javase/6/docs/api/java/util/List.html