1

我想要做的是使用 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;
    }

}
4

2 回答 2

3

您应该实现通用版本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)

不同之处在于参数类型 -ObjectInteger.

这有点混乱,不太清楚你想要实现什么。

但是你的List类实现的点Comparable表明你想将一个实例List与另一个实例进行比较。如果是这样的话,那么它应该像这样 -

public class MyList<E> implements Comparable<MyList> {

    @Override
    public int compareTo(MyList other) {
        //compare and return result
    }

但是参数类型的事实Integer表明您实际上要比较的是Integers,在这种情况下Integer已经是Comparable.

((Comparable) removedItemFromList1).compareTo( removedItemFromList2);

你不需要做所有这些

removedItemFromList1.compareTo(removedItemFromList2);

足够的。如果这就是您所需要的,那么您根本不需要实施Comparable,因此也可以删除该compareTo方法。

于 2012-10-08T05:30:34.373 回答
0

Comparable 接口是这样的

public interface Comparable<T> {

  public int compareTo(T t){




  }

}

你应该使用Type Parameter. 可比是类型参数化。

所以试试这个方法...

public class mList<Integer> implements Comparable<Integer>{


......



     public int compareTo(Integer itemToCompare){


        .....

    }



}
于 2012-10-08T05:51:28.240 回答