Как использовать Comparator <T>в качестве аргумента в универсальном SortedDoublyLinkedList - PullRequest
0 голосов
/ 15 марта 2019

В настоящее время я работаю над заданием для класса, в котором мне поручено создать пустой список, в качестве аргумента которого используется Comparator, а затем создать метод add для этого sortedDoublyLinkedList, в котором передается аргумент, и мне приходится выполнять итерацию по списку. чтобы найти, где новый узел подходит. Я не очень знаком с Comparator, поэтому я немного не знаю, как добавить элементы в мой DoublyLinkedList, потому что я не могу получить доступ к Comparator так, как я предполагал. Вот что у меня сейчас. Вот что у меня сейчас есть.

public class SortedDoubleLinkedList<T> extends BasicDoubleLinkedList<T> {

    Node<T> head=null;
    Node<T> tail=null;
    SortedDoubleLinkedList<T> sDLL;

    public SortedDoubleLinkedList(Comparator<T> comparator2){
        sDLL=new SortedDoubleLinkedList<T>(comparator2);
    }
    public SortedDoubleLinkedList<T> add(T data){

        Node<T> newNode=new Node<T>(data);

        //I have to iterate through the list and find where the new element data         fits
        if(head!=null&&tail!=null) {
            Node<T> cursor=head;
            while(cursor!=null) {
                //the following code doesn't work
                if(sDLL.comparator2.compare(data, cursor.getData())==0) {

                }

            }

        }
        else {
            head=newNode;
            tail=newNode;
        }
        return this; //return the SortedDoubleLinkedList<T>
}

1 Ответ

0 голосов
/ 15 марта 2019

Comparator - это интерфейс.Вам нужно реализовать класс, который будет предоставлять этот интерфейс.

class Whatever implements Comparator<TYPE> {
   int compare(TYPE a, TYPE b) {
      ... code to decide whether a is less than,
          equal to, or greater than b ...
   }
}

Там, где я написал TYPE, вам нужен фактический тип.Простое указание переменной типа T не приведет к выполнению кода, который, как я полагаю, является вашей целью.В конечном итоге вы должны сказать , какой тип появится в вашем списке.Так что я бы ожидал что-то вроде (в вашем коде выше)

public class SortedDoubleLinkedList extends BasicDoubleLinkedList<String> {

, где вы храните строки в вашем списке.И тогда TYPE в моем коде также является String.

ALTERNATIVELY

Вы можете оставить свой универсальный SortedDoubleLinkedList (в терминах T), но в конечном итоге вы хотите получить конкретную информацию об этом, может быть,

SortedDoubleLinkedList<String> = new SortedDoubleLinkedList(new Whatever());

, но Comparator по-прежнему должен быть Comparator<String> (или любым другим типом, который вы выберете).

...