WedX - журнал о программировании и компьютерных науках

Обобщения и реализация интерфейса

Я попытался прокомментировать саму ветку ниже, но у меня недостаточно баллов для нее.
Мой простой вопрос: в чем разница между следующими двумя кодами?

Обратите внимание: я не уверен, является ли первый допустимым синтаксисом, и, возможно, это ответ.

public class BinarySearchTree<T> extends Comparable<T> {}

public class BinarySearchTree<T extends Comparable<T>> {}

Java: как реализовать общий Бинарное дерево поиска?

01.07.2018

  • Я не уверен, является ли первый допустимым синтаксисом: тогда почему бы вам просто не попытаться скомпилировать его, прежде чем задавать вопрос? 01.07.2018
  • Пытаюсь понять как/что кодировать. Это домашняя задача, и мне просто трудно уложить в голове всю концепцию бинарных деревьев поиска и сортировки значений. 01.07.2018
  • И почему это мешает вам набрать эту строку кода в вашем редакторе/IDE и скомпилировать ее? 01.07.2018
  • class BinarySearchTree<T> implements Comparable<T> {}, возможно, совершенно неверен и нарушит работу таких методов, как Arrays.sort. Обычно ожидается, что экземпляры Comparable будут сравниваться с другими экземплярами того же типа (т. е. String сравнивается с другими String). (Кроме того, extends Comparable является ошибкой компиляции.) 01.07.2018
  • Это не было основанием для моего вопроса. Но вы правы, я мог бы избежать этой части моего вопроса, скомпилировав. Спасибо за совет. 01.07.2018

Ответы:


1
public class BinarySearchTree<T> extends Comparable<T> {}

Дерево сопоставимо и может содержать любой тип. Объекты дерева будут сравниваться по типу, который они содержат. Может быть, вы сравниваете только корневые элементы деревьев?
Это неверно, потому что Comparable — это интерфейс; вы не можете расширять классы из интерфейсов.

public class BinarySearchTree<T extends Comparable<T>> {}

Дерево может содержать только сопоставимые типы. Это действительно.

Вы можете объединить их в следующее:

public class BinarySearchTree<T extends Comparable<T>> implements Comparable<BinaryTree<T>> {}
01.07.2018
  • Спасибо! В этом случае мы говорим: класс BinarySearchTree типа T является потомком класса Comparable, который также содержит тип данных T. Кроме того, это реализует интерфейс Comparable типа данных BinarySearchTree‹T›. Я не буду лгать. Это много, чтобы обернуть мою голову. Но я буду продолжать думать/читать об этом, если я на правильном пути. Еще раз спасибо за оперативную помощь. 01.07.2018
  • В сторону: конструкция Comparable<T> почти всегда неверна. Вместо этого используйте Comparable<? super T>. 01.07.2018
  • Я бы сказал, содержит тип T, который является Comparable, потому что тип класса всегда является BinaryTree. Кроме того, Comparable не является классом 01.07.2018
  • @Miguel Возможно, стоит взглянуть на stackoverflow.com/questions/2723397/ 01.07.2018
  • Новые материалы

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

    ИИ в аэрокосмической отрасли
    Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


    Для любых предложений по сайту: [email protected]