Did you read the explanation at java.util.ArrayList.contains(Object)? Book and String are both subclasses of Object, but when you use ArrayList.contains(Object) on an ArrayList filled with Book objects, you need to specify an object argument for whom the equals() method might return true. aBookObject.equals(yourStringObject) is not likely to return true for any of the Book objects in your ArrayList.
edit:
What do I use to see if the array contains a String then?
You would have to iterate over all the objects in the ArrayList, comparing your search String with an appropriate String obtained from each object. The .contains method, if Book.equals() is implemented in any sane way would almost certainly be doing exactly that. I personally wouldn't use ArrayList.contains() for this particular task, I would iterate over the objects and do the string comparison. Using something like a HashMap would greatly simplify code for exact-match search.