Ребят, вроде ерунда, но застрал. Понять не могу эту запись
if (first != null ? !first.equals(solution.first) : solution.first != null) return false;
мы ведь сверху проверили параметр "о" в коде
if (!(o instanceof Solution)) return false;
это условие ведь проверяет на равенство и нулл переданного объекта . Кто нибудь по другому чуть по понятнее может написать? Или с написать так
if (first != null) {
           if (!first.equals(solution.first)) return false;
} else
    return false;