Как реализовать метод compareTo() для корректной работы TreeSet? Насколько я знаю операторы нельзя перегружать, тогда как мне проверять (не)равенство полей для сортировки?
package com.company;
import java.util.*;
import static java.util.Objects.hash;
public class Main {
static Random random = new Random();
static void comapareSets(Set<Myset<Integer>> myset) {
for (int i = 0; i < 15; i++) {
int rand = random.nextInt(10);
System.out.printf("%d ", rand);
myset.add(new Myset<>(rand));
}
System.out.println();
System.out.println(myset);
}
public static void main(String[] args) {
Set<Myset<Integer>> myset = new LinkedHashSet<>();
Set<Myset<Integer>> myset2 = new TreeSet<>();
Set<Myset<Integer>> myset3 = new HashSet<>();
System.out.println(myset.getClass().getSimpleName());
comapareSets(myset);
System.out.println(myset2.getClass().getSimpleName());
comapareSets(myset2);
System.out.println(myset3.getClass().getSimpleName());
comapareSets(myset3);
}
}
class Myset<T> implements Comparable<Myset<T>> {
private final T data;
public Myset(T data) {
this.data = data;
}
@Override
public boolean equals(Object obj) {
if (obj == null) throw new NullPointerException();
if (obj instanceof Myset<?>) {
return ((Myset<?>) obj).data == this.data;
}
return false;
}
//a negative integer, zero, or a positive integer as this object is less than, equal to, or greater than the specified object
@Override
public int compareTo(Myset<T> obj) {
if (this.equals(obj)) {
return 0;
}
// else if (obj.data < this.data)
// {
// return 1;
// }
return -1;
}
@Override
public int hashCode() {
return hash(data);
}
@Override
public String toString() {
return data.toString();
}
}