我想要做的是使用compareTo()方法比较removedItemFromList1和removedItemFromList2,然后将较小的值插入到modifiedList3中,并将两个removedFromList 1或2中较大的一个放回原始列表中。如果我的头发长得足以拉,那么它现在已被拉出来...我不能正确地施展吗?我如何正确地使用compareTo()方法来实现这一目标?
public class List<Integer> implements Comparable
{
private ListNode<Integer> firstNode;
private ListNode<Integer> lastNode;
public void insertAtBack (Integer insertItem)
{
if ( isEmpty())
firstNode = lastNode = new ListNode<Integer>(insertItem);
else
lastNode = lastNode.nextBasket = new ListNode<Integer>( insertItem );
}
public Integer removeFromBack()
{
Integer removedItem = (Integer) lastNode.topBucketInBasket;
if ( firstNode == lastNode)
firstNode = lastNode = null;
else
{
ListNode<Integer> current = firstNode;
while ( current.nextBasket != lastNode)
current = current.nextBasket;
lastNode = current;
current.nextBasket = null;
}
return removedItem;
}
public boolean isEmpty()
{
return firstNode == null;
}
public List<Integer> merge(List<Integer> list1, List<Integer> list2)
{
List<Integer> modifiedList3 = new List<Integer>();
Integer removedItemFromList1 = (Integer) list1.removeFromBack();
Integer removedItemFromList2 = (Integer) list2.removeFromBack();
((Comparable) removedItemFromList1).compareTo( removedItemFromList2);
int comparison = compareTo(removedItemFromList2);
if ( comparison == 1)
modifiedList3.insertAtBack(removedItemFromList2);
list1.insertAtBack(removedItemFromList1);
if ( comparison == -1)
modifiedList3.insertAtBack(removedItemFromList1);
list2.insertAtBack(removedItemFromList2);
return modifiedList3;
}
@Override
public int compareTo(Integer itemToCompare)
{
final int BEFORE = -1;
final int AFTER = 1;
if (this.removedItemFromList1 < list2.removedItemFromList2) return BEFORE;
if (this.removedItemFromList1 > list2.removedItemFromList2) return AFTER;
}
}
答案 0 :(得分:2)
您应该实现通用版本Comparable<Integer>
而不是原始版本Comparable
。
另外,在下面的
中public class List<Integer> implements Comparable
Integer
与java.lang.Integer
不同。实际上,在这种情况下,它就是一种称为形式类型参数的东西。
您可能想将其更改为
//List is kind of ambiguous with java.util.List
public class MyList<E> implements Comparable<Integer> {
或者可能是别的而不是MyList
。
如果您实施Comparable
,则应该
@Override
public int compareTo(Object itemToCompare) {
如果是Comparable<Integer>
(我想是你所追求的那个),它应该是
@Override
public int compareTo(Integer itemToCompare)
不同之处在于参数类型 - Object
和Integer
。
这是一种混乱而且不太清楚你想要实现的目标。
但是List
类实现Comparable
表示您想要将List
的实例与另一个实例进行比较。如果是这样,那么它应该像这样 -
public class MyList<E> implements Comparable<MyList> {
@Override
public int compareTo(MyList other) {
//compare and return result
}
但参数类型为Integer
这一事实表明您实际要比较的内容是Integer
s,在这种情况下Integer
已经Comparable
。< / p>
((Comparable) removedItemFromList1).compareTo( removedItemFromList2);
您无需执行所有操作
removedItemFromList1.compareTo(removedItemFromList2);
就够了。如果这就是您所需要的,那么您根本不需要实现Comparable
,因此也可以删除compareTo
方法。
答案 1 :(得分:0)
Comparable界面就是这样
public interface Comparable<T> {
public int compareTo(T t){
}
}
您应该使用Type Parameter
。 可比较是Type Parametrized。
所以试试这个......
public class mList<Integer> implements Comparable<Integer>{
......
public int compareTo(Integer itemToCompare){
.....
}
}