Если вы не хотите использовать равные или компаратор, вы можете попробовать сделать это с помощью отражения.
Перебрать поля двух объектов и сравнить их -
Field[] fields1 = o1.getClass().getDeclaredFields();
Field[] fields2 = o2.getClass().getDeclaredFields();
for (int i = 0; i++ ; i>fields.lenght) {
// compare the two fields under the assumption that if the two
// objects are the same their fields will be the same in each iteration
}
используйте field.get(Object)
, чтобы получить значение поля
Поскольку могут быть вложенные объекты и коллекции объектов, вам придется делать это рекурсивно для каждого элемента, и циклы указателя могут представлять проблему. поэтому, если вы ожидаете циклов, вам придется реализовать более сложное решение (вам нужно будет сохранить фактические указатели. и убедиться, что вы не пытаетесь рекурсивно сравнивать одни и те же элементы дважды).