Answers to Questions and Exercises:
Questions
- Question: At the beginning of this lesson, you learned that the core collection interfaces are organized into two distinct inheritance trees. One interface in particular is not considered to be a true
Collection
, and therefore sits at the top of its own tree. What is the name of this interface?
Answer:Map
- Question: Each interface in the collections framework is declared with the
<E>
syntax, which tells you that it is generic. When you declare aCollection
instance, what is the advantage of specifying the type of objects that it will contain?
Answer: Specifying the type allows the compiler to verify (at compile time) that the type of object you put into the collection is correct, thus reducing errors at runtime.
- Question: What interface represents a collection that does not allow duplicate elements?
Answer:Set
- Question: What interface forms the root of the collections hierarchy?
Answer:Collection
- Question: What interface represents an ordered collection that may contain duplicate elements?
Answer:List
- Question: What interface represents a collection that holds elements prior to processing?
Answer:Queue
- Question: What interface repesents a type that maps keys to values?
Answer:Map
- Question: What interface represents a double-ended queue?
Answer:Deque
- Question: Name three different ways to iterate over the elements of a
List
.
Answer: You can iterate over aList
using streams, the enhancedfor
statement, or iterators.
- Question: True or False: Aggregate operations are mutative operations that modify the underlying collection.
Answer: False. Aggregate operations do not mutate the underlying collection. In fact, you must be careful to never mutate a collection while invoking its aggregate operations. Doing so could lead to concurrency problems should the stream be changed to a parallel stream at some point in the future.
Exercises
- Exercise: Write a program that prints its arguments in random order. Do not make a copy of the argument array. Demonstrate how to print out the elements using both streams and the traditional enhanced for statement.
Answer:
import java.util.*; public class Ran { public static void main(String[] args) { // Get and shuffle the list of arguments List<String> argList = Arrays.asList(args); Collections.shuffle(argList); // Print out the elements using JDK 8 Streams argList.stream() .forEach(e->System.out.format("%s ",e)); // Print out the elements using for-each for (String arg: argList) { System.out.format("%s ", arg); } System.out.println(); } }
- Exercise: Take the
FindDups
example and modify it to use aSortedSet
instead of aSet
. Specify aComparator
so that case is ignored when sorting and identifying set elements.
Answer:
import java.util.*; public class FindDups { public static void main(String[] args) { Set<String> s = new HashSet<String>(); for (String a : args) s.add(a); System.out.println(s.size() + " distinct words: " + s); } }
- Exercise: Write a method that takes a
List<String>
and appliesString.trim
to each element.
Answer:
The enhancedfor
statement does not allow you to modify theList
. Using an instance of theIterator
class allows you to delete elements, but not replace an existing element or add a new one. That leavesListIterator
:import java.util.*; public class ListTrim { static void listTrim(List<String> strings) { for (ListIterator<String> lit = strings.listIterator(); lit.hasNext(); ) { lit.set(lit.next().trim()); } } public static void main(String[] args) { List<String> l = Arrays.asList(" red ", " white ", " blue "); listTrim(l); for (String s : l) { System.out.format("\"%s\"%n", s); } } }
- Exercise: Consider the four core interfaces,
Set
,List
,Queue
, andMap
. For each of the following four assignments, specify which of the four core interfaces is best-suited, and explain how to use it to implement the assignment.
Answers:
- Whimsical Toys Inc (WTI) needs to record the names of all its employees. Every month, an employee will be chosen at random from these records to receive a free toy.
Use aList
. Choose a random employee by picking a number between0
andsize()-1
. - WTI has decided that each new product will be named after an employee — but only first names will be used, and each name will be used only once. Prepare a list of unique first names.
Use aSet
. Collections that implement this interface don't allow the same element to be entered more than once. - WTI decides that it only wants to use the most popular names for its toys. Count up the number of employees who have each first name.
Use aMap
, where the keys are first names, and each value is a count of the number of employees with that first name. - WTI acquires season tickets for the local lacrosse team, to be shared by employees. Create a waiting list for this popular sport.
Use aQueue
. Invokeadd()
to add employees to the waiting list, andremove()
to remove them.
- Whimsical Toys Inc (WTI) needs to record the names of all its employees. Every month, an employee will be chosen at random from these records to receive a free toy.