### Question:
ObjectList { public static void hash (Object head, HashData hd){ if (head instanceof Node){ for (Node n = (Node) head; n != null; n = n.next) { hd.add(n.data); } } else if (head != null){ hd.add(head); } } private  ObjectList(); static Iterator iterator(Object head); static TypedIterator<A> typedIterator(Object head, Class<A> type); static Object createList(Object... values); static Object valueOf(Object o); static Object set(Object head, Object newHead); static Object forceSet(Object head, Object newHead); static Object add(Object head, Object data); static Object replace(Object head, Object oldData, Object newData); static Object remove(Object head, Object data); static boolean contains(Object head, Object o); static boolean containsType(Object head, Class<?> type); static boolean isList(Object head); static boolean isEmpty(Object head); static int size(Object head); static int numberOfInstances(Object head, Class<?> type); static Object get(Object head, int idx); static Object getFirst(Object head); static Object getNext(Object head, Object prevData); static A getFirst(Object head, Class<A> type); static A getNext(Object head, Class<A> type, Object prevData); static void hash(Object head, HashData hd); static boolean equals( Object head1, Object head2); static Object clone(Object head);  }### Answer:
@Test public void testHash() { Object l = null; HashData hd = new HashData(); ObjectList.hash(l, hd); HashData hd1 = new HashData(); assertTrue( hd.getValue() == hd1.getValue()); l = "one"; hd = new HashData(); ObjectList.hash(l, hd); hd1 = new HashData(); hd1.add("one"); assertTrue( hd.getValue() == hd1.getValue()); l = ObjectList.createList(new A("one"), new A("two")); hd = new HashData(); ObjectList.hash(l, hd); hd1 = new HashData(); hd1.add("one"); hd1.add("two"); assertTrue( hd.getValue() == hd1.getValue()); l = null; hd = new HashData(); ObjectList.hash(l, hd); hd1 = new HashData(); hd1.add("one"); assertTrue( hd.getValue() != hd1.getValue()); l = "one"; hd = new HashData(); ObjectList.hash(l, hd); hd1 = new HashData(); assertTrue( hd.getValue() != hd1.getValue()); l = "one"; hd = new HashData(); ObjectList.hash(l, hd); hd1 = new HashData(); hd1.add("two"); assertTrue( hd.getValue() != hd1.getValue()); l = ObjectList.createList(new A("one"), new A("two")); hd = new HashData(); ObjectList.hash(l, hd); hd1 = new HashData(); hd1.add("one"); assertTrue( hd.getValue() != hd1.getValue()); l = ObjectList.createList(new A("one"), new A("two")); hd = new HashData(); ObjectList.hash(l, hd); hd1 = new HashData(); hd1.add("two"); hd1.add("one"); assertTrue( hd.getValue() != hd1.getValue()); }