Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 10 лет назад пользователемМихаил Сикетин
1 §12 Подумайте над реализацией интерфейса Comparable
2 String implements Comparable Comparable:
3 Правила для compareTo() sgn(x) – ф-ия signum, значения [-1,0,1] Для всех х,у: sgn(x.compareTo(y)) == -sgn(y.compareTo(x)) В частности, если x.compareTo(y) бросает exception y.compareTo(x) должен тоже Транзитивность: x.compareTo(y) > 0 && y.compareTo(z) >0 следовательно x.compareTo(z) > 0
4 x.compareTo(y) == 0 следовательно sgn(x.compareTo(z)) == sgn(y.compareTo(z)) для любого z Рекоммендуется: x.compareTo(y) == 0 тогда x.equals(y) Сравнивая разные классы следует кидать ClassCastException
5 Не пытайтесь переиспользовать compareTo() в наследниках объектов где он уже есть. Используйте прием с полем такого типа и методом view() Нарушение согласования с equals() BigDecimal(1.0) && BigDecimal(1.00) не равны при использовании HashSet равны при использовании TreeSet
6 Отличия от equals: Не надо проверять и приводить аргумент к нужному типу. В противном случае вызов не скомпилируется. Если аргумент null, следует бросить NullPointerException
7 Сравнивайте объекты используя compareTo на полях рекурсивно
8 Поля простого типа надо сравнивать используя. Эл-ты с плавающей запятой сравнивайте через compare. Массивы сравнивайте поэлементно. Если класс содержит множество значимых полей, то порядок их сравнения критически важен. –Начинайте с наиболее важных –Если результат сравнения вернул не 0, просто верните его –Если 0, то продолжайте дальше
10 Улучшенный пример Следите за переполнением!
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.