Their functionality is very different. The exists() method returns true/false based on whether or not any values in the DB are returned by the specified query:
if (User::exists()) { // only do something if a user exists in the DB
Contains, on the other hand, returns true only if the specific Collection contains a particular item.
if ($collection->contains('Desk')) { // Do something.
That is, in order to emulate exists() on a collection to see if anything exists at all, you'd end up using $collection->isEmpty() instead.
So while the two can function in roughly the same capacity (you can craft a query which selects a user with a specific ID for instance), contains() will always function with a single element vs. exists() which can test for the presence of any objects meeting a criteria you specify in the SQL query.