2016-09-22 2 views
-1

У меня есть набор объектов A.Как я могу сказать, что объект присутствует в наборе, который также имеет дерево?

Class A { 

    String text1; 
    String text2 
    TreeSet<ClassAA> classAaSet; 
    @Override 
    public boolean equals(object b){ 

    } 
    @Override 
    public int hashCode(){ 

    } 
} 

Другой класс:

Class AA { 
    String y; 
    String z; 

    @Override 
    public int hashCode() { 
     return Objects.hash(y,z) 
    } 

    @Override 
    public int compareTo(ClassAA other) { 
     return y.compareTo(other.y) 
    } 
} 

У меня есть набор элементов а и один объект A. Как сделать Set<A>aSet.contains(A)?

Внутренне, так как у меня есть дерево, его игнорирование выполняется равным образом.

+2

Этот вопрос очень неясен. Если 'A' будет помещен в' Set', он должен правильно реализовать 'equals()' и 'hashCode()', которые вы еще не сделали. Кроме того, в вашем вопросе не упоминается 'AA'. Как «АА» вписывается в то, что вы спрашиваете? –

+0

Что такое 'ClassAA'? – shmosel

+0

'java.util.TreeSet' использует' equals() 'для содержащихся объектов. Ваша проблема может быть противоположной: класс 'AA' не реализует' equals() '? –

ответ

0

Было бы яснее, если бы вы разместили код, который был правильным в той мере, в какой он мог быть скомпилирован. В любом случае:

Ваш класс AA должен выполнить три требования: (1) равные объекты должны возвращать один и тот же hashCode(), (2) compareTo() должны быть совместимы с equals(), и (3) для compareTo() и TreeSet правильно работать, класс должен реализовать Comparable<AA>.

Я надеюсь, что вы можете добавить предложение implements (3) самостоятельно. Для (2) посмотрите документацию Comparable. Самое простое исправление - переопределить equals(), чтобы сказать, что AA равно другому AA с тем же y. К сожалению, это сломается (1), потому что текущий метод hashCode также зависит от z.

Так что решите, что значит для двух AA объектов равными. Другими словами, данный classAaSet в A и объект AA, что означает, что набор уже содержит такой AA. Достаточно ли для него иметь то же самое y или он должен иметь одинаковые y и те же z? Затем код equals(), hashCode() и compareTo(), чтобы отразить ваше решение.

На самом деле, я считаю, что TreeSet не использует hashCode(), поэтому в грязном решение, которое вы могли бы жить без выполнения (1), даже без перекрывая hashCode() вообще. У вас могут быть проблемы, если ваш класс использовался в новом контексте в другой раз, поэтому я бы не рекомендовал его.

0

Вы хотите создать набор объектов класса А, тогда вы должны переопределить оба метода equals и hashcode() в классе A. Вы добавили метод equals() в класс A, но вы сохранили его блок определения пустым, равным не переопределяя или не применяя этот метод. В последней строке вы говорите, что игнорируете реализацию Equals, но где реализация? Его нет. Вопрос не ясен. Можете ли вы объяснить, что именно вы пытаетесь?

+0

Прошу прощения .. Да, я сохранил его пустым только для цели вопроса. Итак, у меня есть набор из A (позволяет называть его setOfA), и каждый A имеет набор деревьев из AA. У меня есть еще один объект A (objOfA), который не находится в setOfA, который идентичен одному из объектов в setOfA, так что setOfAs.contains (objOfA) должен возвращать true.Но так как каждый A имеет treeSet элементов, treeet хотя имеет равный overriden, там не называется. – Diva

 Смежные вопросы

  • Нет связанных вопросов^_^