We would like to know how to create java.util.Set implementation without using element.hashCode().
import java.util.Comparator; import java.util.Set; import java.util.TreeSet; // w ww .ja va2s .com class MyObject { final int value; public MyObject(int val) { this.value = val; } @Override public int hashCode() { throw new IllegalStateException("This method must not be called"); } } public class Main { public static void main(String[] args) { Set<MyObject> set = new TreeSet<>(new Comparator<MyObject>() { @Override public int compare(MyObject left, MyObject right) { return left.value - right.value; } }); set.add(new MyObject(1)); set.add(new MyObject(2)); set.add(new MyObject(3)); set.add(new MyObject(1)); // '1' is already in set System.out.println("size:"+set.size());// print 3 System.out.println(set.remove(new MyObject(3))); System.out.println("size:"+set.size()); } }
The code above generates the following result.