import java.util.HashMap;
import java.util.HashSet;
import java.util.Hashtable;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet;
class Test<K> {
Map<A, Object> m1 = new HashMap<>(); // Compliant
Map<B, Object> m2 = new Hashtable<>(); // Noncompliant {{Add a "hashCode()" method to "B" or remove it from this hash.}}
Map<C, Object> m3 = new LinkedHashMap<>(); // Compliant
Map<D, Object> m4 = new LinkedHashMap<>(); // Compliant
Set<A> s1 = new HashSet<>(); // Compliant
Set<B> s2 = new TreeSet<>(); // Compliant
Set<B> s3 = new HashSet<>(); // Noncompliant {{Add a "hashCode()" method to "B" or remove it from this hash.}}
Set<C> s4 = new HashSet<>(); // Compliant
Set<K> s5 = new HashSet<K>(); // Compliant
Set s6 = new HashSet(); // Compliant
}
class A {
boolean equals = false;
boolean equals(Object o1, object o2) { return false; }
boolean equals(A a) { return false; }
}
class B {
@Override
public boolean equals(Object obj) { return false; }
int hashCode = 1;
int hashCode(int i) { return 0; }
}
class C {
@Override
public int hashCode() { return 0; }
}
class D {
@Override
public boolean equals(Object obj) { return false; }
@Override
public int hashCode() { return 0; }
}