Common use: as event listener classes in Swing GUIs.
Advantage: listeners are often small classes that know implementation details of their enclosing classes. This is a good match for nested classes.
Disadvantage: code reuse. But when you realize a listener can be turned into a useful top-level class (for example the Action behind the exit menu item), you refactor. Most of the time event listeners are too specific for you to consider reuse.
creating a class that implements the Comperator interface can be done on the fly as a anonymous inner class. that can be by far the easiest solution if you need to pass a Comperator into a method call, even though i go with poster #1 - the code is not so reusable...