Java Collection How to - Create java.util.Set implementation without using element.hashCode()








Question

We would like to know how to create java.util.Set implementation without using element.hashCode().

Answer

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.