Anywhere where you have a class that can be used "generically" with different classes while still wanting to have type safety. Collections are definitely the most common use, though.
If you want another non-collection example from the Java libraries, have a look at
java.util.concurrent.Future. That's used for asynchronous calls, where at some point in the future you'll be able to get a value back. The generic parameter allows this value to be of any specific type, so you still get type safety without having to cast it.