Interfaces In The Wild ====================== The first situations where you’ll want to use interfaces involve applying pre-defined interfaces and classes that are part of Java. Here are a few examples. Comparable ------------- **Purpose**: A class implements ``Comparable`` in order to allow comparison---in a “greater than” and “less than” sense---to another instance of the class. This is a “parameterized” interface, which means that you need to specify the class that it will be comparing. For example, ``Comparable`` would compare ``Job`` objects. **Important Methods**: ``compareTo(T)`` `Comparable Documentation `__ Comparator ------------- **Purpose**: Compares two objects of a given class. To allow comparisons and ordering based on the different fields, you can create several different ``Comparator`` classes. The class for the compared objects does NOT implement the interface itself. **Important Methods**: ``compare(T, T)`` `Comparator Documentation `__ This interface can be used to determine, given two objects of the given type, which one is “greater” than the other. It is also used by collections such as :ref:`an ArrayList ` to sort its contents with the :ref:`sort ` method. .. admonition:: Note For more on the differences between ``Comparator`` and ``Comparable``, see `this article `__. Iterable ----------- **Purpose**: Enables iteration over a collection of objects using a for-each loop **Important Methods**: ``iterator()`` `Iterable Documentation `__ This interface is implemented by the ``ArrayList`` class, which we’ve been using throughout this course. .. admonition:: Example .. sourcecode:: java :linenos: Iterable collection = new ArrayList<>(); // Add items to the collection for (String item : collection) { // do something with each item } List ------- **Purpose**: Enables access to objects in a collection by index. In other words, it enables ordered collections. **Important Methods**: ``add(int, T)``, ``get(int)``, ``indexOf(T)`` `List Documentation `__ This interface is also implemented by the ``ArrayList`` class, which we’ve been using throughout this course. In fact, ``List`` extends ``Iterable``. *An interface may extend another interface*, in the same way that classes may extend each other. .. admonition:: Example .. sourcecode:: java :linenos: List collection = new ArrayList<>(); // Add items to the collection // Get the first item String firstItem = collection.get(0); Map --------- **Purpose**: Represents a collection of key/value pairs. **Important Methods**: ``get(K)``, ``containsKey(K)``, ``put(K, V)`` `Map Documentation `__ This interface is implemented by the ``HashMap`` class, which we’ve been using throughout this course. .. admonition:: Example .. sourcecode:: java :linenos: Map collection = new HashMap<>(); // Add items to the collection // Get item with key "hello" String hello = collection.get("hello"); Check Your Understanding ------------------------ .. admonition:: Question True or False An interface can extend another interface. .. ans: True