如何将 compareTo 用于泛型。 (<E>, <Integer>...)
How to use compareTo for generics. (<E>, <Integer>...)
我需要在教授给出的程序中使用 compareTo()。
但是那个程序包括泛型。该功能存在问题。所以我的问题是如何实现它。
if(node1.getElement().compareTo(node2.getElement()) < 0)
我需要一些解释 java.util.Iterator;
因为我需要在主 class 中使用 iteration()
。
我是 java 的新手。可以自由地向新手解释。 Tnx 伙计们
这是完整的代码 :D
https://pastebin.com/mA9igb1t
首先:在您的 main
方法中,您不能使用通用 E
。在您的情况下,您必须使用正确的类型 Integer
。
比较器问题有两种解决方案:
- 如果您确定
E
将始终是原始类型的包装器
(如 Byte、Short、Integer、Long、Float 或 Double)你可以声明
SLL 作为
class SLL<E extends Number & Comparable> implements Iterable<E>
那么你的 if
就可以了。
SLL
不必实施 Comparable
。
- 否则,您可以在
if
中使用 BigDecimal
BigDecimal node1Value = new BigDecimal(node1.getElement().toString());
BigDecimal node2Value = new BigDecimal(node2.getElement().toString());
if(node1Value.compareTo(node2Value) < 0)
关于迭代器问题,由于您必须在 SLL
对象上调用 .iterator()
,因此 class 必须实现 Iterable.
您可以在 The Java Tutorials - The Collection Interface.
上阅读有关迭代器的信息
我还建议看一下 LinkedList
的源代码
我需要在教授给出的程序中使用 compareTo()。 但是那个程序包括泛型。该功能存在问题。所以我的问题是如何实现它。
if(node1.getElement().compareTo(node2.getElement()) < 0)
我需要一些解释 java.util.Iterator;
因为我需要在主 class 中使用 iteration()
。
我是 java 的新手。可以自由地向新手解释。 Tnx 伙计们
这是完整的代码 :D https://pastebin.com/mA9igb1t
首先:在您的 main
方法中,您不能使用通用 E
。在您的情况下,您必须使用正确的类型 Integer
。
比较器问题有两种解决方案:
- 如果您确定
E
将始终是原始类型的包装器 (如 Byte、Short、Integer、Long、Float 或 Double)你可以声明 SLL 作为
class SLL<E extends Number & Comparable> implements Iterable<E>
那么你的if
就可以了。
SLL
不必实施Comparable
。 - 否则,您可以在
if
中使用 BigDecimalBigDecimal node1Value = new BigDecimal(node1.getElement().toString());
BigDecimal node2Value = new BigDecimal(node2.getElement().toString());
if(node1Value.compareTo(node2Value) < 0)
关于迭代器问题,由于您必须在 SLL
对象上调用 .iterator()
,因此 class 必须实现 Iterable.
您可以在 The Java Tutorials - The Collection Interface.
上阅读有关迭代器的信息
我还建议看一下 LinkedList