Как использовать сравнить для дженериков.(<E>, <Integer>...) - PullRequest
0 голосов
/ 27 октября 2018

Мне нужно использовать compareTo () в программе, предоставленной моим профессором.Но эта программа включает в себя дженерики.И есть проблема с этой функцией.Поэтому мой вопрос: как я могу это реализовать?

if(node1.getElement().compareTo(node2.getElement()) < 0)

И мне нужно какое-то объяснение для java.util.Iterator;, потому что мне нужно использовать iteration() в основном классе.Я новичок в Java.Будьте свободны, чтобы объяснить это новичку.Tnx парни

вот код всего веееее: D https://pastebin.com/mA9igb1t

1 Ответ

0 голосов
/ 28 октября 2018

Прежде всего: в вашем main методе вы не можете использовать универсальный E.Вы должны использовать правильный тип, Integer в вашем случае.

Существует два решения проблемы компаратора:

  1. Если вы уверены, E всегда будет оболочкой для примитивного типа (например, Byte, Short, Integer, Long,Float или Double) вы можете объявить SLL как
    class SLL<E extends Number & Comparable> implements Iterable<E>
    , тогда ваш if будет работать.
    SLL не требует реализации Comparable.
  2. В противном случае вы можете использовать BigDecimal в своем if
    BigDecimal node1Value = new BigDecimal(node1.getElement().toString());
    BigDecimal node2Value = new BigDecimal(node2.getElement().toString()); if(node1Value.compareTo(node2Value) < 0)

О проблеме итераторапоскольку вы должны вызывать .iterator() для вашего SLL объекта, этот класс должен реализовывать Iterable .
Вы можете прочитать об итераторах в Учебники по Java - Интерфейс коллекции .
Я также предлагаю взглянуть на исходный код LinkedList

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...