Home Page
            >
            Collections
            >
            Interfaces
        
        
        Answers to Questions and Exercises:
        
Questions
- 
Question:
        This lesson mentions three ways to traverse a
        List. Describe them, and note the limitations of
        each.
Answer:
- Use the enhanced forstatement:
List<Thing> list;
...
for (Thing thing : list) {
    ...
}
- Use the traditional forstatement together with anIterator:
List<Thing> list;
...
for (Iterator<Thing> it = list.iterator(); it.hasNext(); ) {
    Thing thing = it.next();
    ...
}
- Use the traditional forstatement together with anListIterator:
List<Thing> list;
...
for (ListIterator<Thing> it = list.iterator(); it.hasNext(); ) {
    Thing thing = it.next();
    ...
}
 
- 
Question:
        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.
Answer:
                - 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 between0andsize()-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.
 
- 
Question:
The following program is supposed to print the string "Blue". Instead,
it throws an error. Why?
import java.util.*;
public class SortMe {
    public static void main(String args[]) {
        SortedSet<StringBuffer> s = new TreeSet<StringBuffer>();
        s.add(new StringBuffer("Red"));
        s.add(new StringBuffer("White"));
        s.add(new StringBuffer("Blue"));
        System.out.println(s.first());
    }
}
TreeSortelements must be instances of a class that
implementsComparable.StringBufferdoes not.
Exercises
- Exercise:
Write a program that prints its arguments in random order. Do not
make a copy of the argument array.
Answer:
import java.util.*;
public class Ran {
    public static void main(String[] args) {
        List<String> argList = Arrays.asList(args);
        Collections.shuffle(argList);
        for (String arg: argList) {
            System.out.format("%s ", arg);
        }
        System.out.println();
    }
}
- Exercise:
Take the 
FindDups exampleand modify it to use aSortedSetinstead of aSet. Specify aComparatorso that case is
ignored when sorting and identifying set elements.
Answer:
import java.util.*;
public class FindDups {
    public static void main(String[] args) {
        Comparator<String> comparator = new Comparator<String>() {
            public int compare (String s1, String s2) {
                return s1.compareToIgnoreCase(s2);
            }
        };
        SortedSet<String> s = new TreeSet<String>(comparator);
        for (String a : args)
            if (!s.add(a))
                System.out.println("Duplicate detected: " + a);
        System.out.println(s.size() + " distinct words: " + s);
    }
}
- Exercise:
Write a method that takes a List<String>and
appliesString.trimto each element. To do this, you'll need to pick one of the three
iteration idioms that you described in Question 1. Two of these will
not give the result you want, so be sure to write a program that
demonstrates that the method actually works!
Answer:
The enhancedforstatement does not allow you to modify
theList. Using anIteratorallows 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);
        }
    }
}