The main method from here prompts the
user to input the number of points that need to be generated, then
randomly generates the specified number of points (*MyPoint*
objects) in a certain way, and then computes the number of *distinct*
points in two different ways: (1) by using an ArrayList, and (2)
by using sorting. Two points (*MyPoint* objects) are said
to be distinct if they differ in either their x-coordinate (*x*
field) or their y-coordinate (*y* field). Notice how the
*equals* method of the *MyPoint* class enables this
computation when using an ArrayList, and how the *compareTo*
method of the *MyPoint* class enables this computation when
using *Arrays.sort*.

In this homework, you should add code in the main method that
does the same computation (that is, counting the number of
distinct points in the array *arr*) using a *HashMap*,
which is an existing hash table implementation of a Map. Also have the
main method print the computed number of distinct points and
the time taken by this computation, exactly as is done when using
an ArrayList/Sorting. See the example
from class to recall how *HashMap* is to be used.

Note that the implementation of the *hashCode* method in
the *MyPoint* class influences the time taken by your code
that uses *HashMap*. That is because the *hashCode*
method is one component of the hash function being used. You
should optimize the time taken by your *HashMap*-based
code by changing the *hashCode* method as you wish. For
doing this, it will help to understand how the points in *arr*
are being generated.

Understanding this homework requires you to understand the material covered in the lectures based on Sections 9.1 and 9.2, and in the discussion sections on November 1.

Run the completed program with the number of points being set to 10000, 50000, 100000, and 200000. For each of these four numbers, report the time taken by the ArrayList-based, sort-based, and HashMAp-based approaches as measured by the program. (For each of the four numbers, run the program a few times and report times from a run that you feel is representative.) You can report these times as a comment in the file that houses the main method.

Submit the source files into a dropbox in ICON called Homework8. This assignment is due by 11:59 pm on Monday, Nov 12.