In class, we had PostalAddress
implement the Comparable
interface and wrote a compareTo
method to give it a natural order. Sometimes we want to define additional orderings on a class, and so we define a new Comparator
class for each such ordering. (See the notes for an examples of using a “postal sort”).
(2 points) Define a StringACountComparator
for String
such that a sort
call on a List<String>
of Strings sorts them by the number of times the lowercase character a
occurs, in ascending order (least to greatest). Show the entire class definition.
For example, on input list ["Angela", "aardvark", "bird"]
, the list sorted according to this comparator will be ["bird", "Angela", "aardvark"]
Hints:
- Start with the class declaration;
StringACountComparator
should implementComparator
with an appropriate type parameter (<String>
) – just like thePostalAddressComparator
implementedComparator
with typePostalAddress
. - You only have to implement one method. The simpler and clearer, the better.
- Use a method of
String
to retrieve the characters. Then count the occurrences ofa
. - You can compare the counts using
<
,>
, and/or==
correctly, or you can useInteger.compare
(examples of each are in the lecture notes) - Write this class in Eclipse, not MS Word or Google Docs, or you’re gonna have a bad time.
Suppose we have sets of integers S and T, and we have corresponding Java objects of type Set<Integer>
named s
and t
. For each of the following expressions, are the values equal? You’ll probably want to read the Java API’s description of each method. Explain your answer in a single sentence. The key thing to consider is whether the expression defines a value (either a boolean or a new set) or modifies a value. (1 point each)
A. 6 ∈ T and t.contains(6)
B. T ⊆ S and s.containsAll(t)
C. S ∩ T and the contents of s
after calling s.retainAll(t)
D. T \ S and the contents of t
after calling t.removeAll(s)