8.4. 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.

8.4.1. Comparable<T>

Purpose: A class implements Comparable<T> 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<Job> would compare Job objects.

Important Methods: compareTo(T)

Comparable<T> Documentation

8.4.2. Comparator<T>

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<T> 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 an ArrayList to sort its contents with the sort method.

Note

For more on the differences between Comparator and Comparable, see this article.

8.4.3. Iterable<T>

Purpose: Enables iteration over a collection of objects using a for-each loop

Important Methods: iterator()

Iterable<T> Documentation

This interface is implemented by the ArrayList<T> class, which we’ve been using throughout this course.

Example

1
2
3
4
5
6
7
Iterable<String> collection = new ArrayList<>();

// Add items to the collection

for (String item : collection) {
   // do something with each item
}

8.4.4. List<E>

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<T> Documentation

This interface is also implemented by the ArrayList<T> class, which we’ve been using throughout this course. In fact, List<T> extends Iterable<T>. An interface may extend another interface, in the same way that classes may extend each other.

Example

1
2
3
4
5
6
List<String> collection = new ArrayList<>();

// Add items to the collection

// Get the first item
String firstItem = collection.get(0);

8.4.5. Map<K, V>

Purpose: Represents a collection of key/value pairs.

Important Methods: get(K), containsKey(K), put(K, V)

Map<K, V> Documentation

This interface is implemented by the HashMap<K, V> class, which we’ve been using throughout this course.

Example

1
2
3
4
5
6
Map<String, String> collection = new HashMap<>();

// Add items to the collection

// Get item with key "hello"
String hello = collection.get("hello");

8.4.6. Check Your Understanding

Question

True or False

An interface can extend another interface.