在这种情况下,如何正确实现Comparable for List?

时间:2012-10-08 05:26:44

标签: java list comparable

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

}

2 个答案:

答案 0 :(得分:2)

您应该实现通用版本Comparable<Integer>而不是原始版本Comparable

另外,在下面的

public class List<Integer> implements Comparable

Integerjava.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这一事实表明您实际要比较的内容是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){


        .....

    }



}