在参数化链接列表的实例化时设置比较器

时间:2014-04-17 03:01:06

标签: java linked-list comparator parameterization

我正在处理已排序的链接列表作业,并对设置比较器感到困惑。我编写了一个链接列表类,它被参数化以接受任何类。链表工作正常,但我对如何为列表设置比较器感到困惑,因为它是参数化的。我首先创建一个比较器类并将其传递给构造函数吗?比较器将用于维护列表的排序。或者我需要在我设置的类中有一个变量来改变链表类中定义的比较器的行为?对不起,如果我没有多大意义,因为我有点困惑。谢谢!

编辑:

我应该澄清一下,我们不允许使用Java集合库中的LinkedList,我们正在设计自己的(是的,我知道我不会在实践中这样做,但它是一个家庭作业设计exorcize)。我的LinkedList类看起来像这样:

public class LinkedList<T> implements Iterable<T> {
    private LinkedListNode<T> head = null;
    private int size = 0;
        .
        .
        .
        //various methods for retrieving size, iterator etc...
}

插入元素后,应将其放置在正确的位置。我的想法是通过在实例化LinkedList对象时传入的比较器来确定它。也许是这样的:

LinkedList<MyClass> myList(MyClass.myComparator);

我的问题是我需要在对象的整个生命周期中使用同一个类(MyClass)的多个比较器。我也很困惑如何在传入后在LinkedList中设置比较器。

1 个答案:

答案 0 :(得分:0)

LinkedList不是已排序的集合,因此您无法在构建期间将其传递给Comparator。注意,它的构造函数都没有Comparator

相反,您将构建它并添加到它,然后使用

Collections.sort(myList, new MyComparator());

您可以使用以下语法编写参数化类型Comparator的{​​{1}}。

T

显然,您希望将上面的public class MyComparator implements Comparator<T>() { public int compare (T a, T b) { // Put comparison logic here. } } 替换为您的类型名称。