Metoda find() a listei legate . Cum să (Programare, Java)

Ernusc a intrebat.

okey, am o listă legată (nu colecții) și am creat o nouă metodă pentru a găsi un obiect în lista mea legată. Deci, ceva de genul acesta:

 public Object find(Linked obj) {

        Linked newObj = firstLink;

        while(newObj != null) {

            if(newObj == obj) {
                return obj;
            }
            else {

                newObj = newObj.next;
            }
        }

Apropo, am 2 clase: Linked și Linkedlist. În prima, eu am o referință la nodul următor și o funcție de afișare. Acțiunea principală se află în Linkedlist, unde am toate metodele precum insert, display și o funcție firstLink referință (ultimul nod inserat în lista mea) ( metoda mea find() se află, de asemenea, în această clasă). Așadar, în funcția mea principală fac următoarele:

Linkedlist obj = new Linkedlist();
obj.insert("Auto");

Linkedlist obj2 = new Linkedlist();
obj2.insert("Moto");

Și cum pot apela metoda mea find() pentru a verifica dacă metoda mea Linkedlist are (de exemplu) obj2 ?

Comentarii

  • utilizați newObj.equals(obj) (după ce o suprascrieți în clasa Linked) și fiți conștienți de faptul că obj2 este o listă Linkedlist, nu un obiect de căutat. –  > Por wxyz.
2 răspunsuri
CodingBird

Gândește-te în felul următor:

Aveți clasa Linked (acesta este un nod de listă legată, iar fiecare nod ar trebui să aibă următorul pointer și elementul din interiorul nodului). Deci, această clasă ar trebui să aibă metode constructor, setter și getter.

Pe de altă parte, clasa Linkedlist este clasa principală care gestionează obiectul Linked (care gestionează nodul listei legate). În această clasă trebuie să aveți o referință la nodul rădăcină (primul nod pe care îl introduceți). Prin urmare, în programul dumneavoastră ar trebui să aveți doar unul/mai multe obiecte Linked și Linkedlist ca clasă principală.

Linked root = new Linked("Auto",null); //here Linked constructor takes 2 parameters, the element and the next pointer.
//Since you only inserted one element so far, the next element should be null.

//Insert another element
insertAtEnd("Moto");

public void insertAtEnd(String element){
    Linked curr = root;
    while(curr.next != null) curr = curr.next;
    curr.setNext(new Linked(element,null);
}

public Linked findElement(String element){
    Linked curr = root;
    while(curr!=null){
         if(curr.getElement().equals(element)) return curr;
         else curr = curr.next;
    }
    return null; //element not found
}

Comentarii

  • Da, vă mulțumesc. Funcționează! Iau codul dvs. de la declarația if. Și este o modalitate ușoară de a compara, deoarece nu are rost să comparăm 2 obiecte dacă există doar 1 var. Deci, folosind metoda dvs., nu trebuie să suprascriu equals() și hashCode(). Mulțumesc! –  > Por Ernusc.
  • @Ernusc nicio problemă! Mă bucur că v-a ajutat 🙂 –  > Por CodingBird.
Stefan Freitag
  • Pentru a compara un singur obiect din LinkedList cu un alt obiect din LinkedList:

    Implementați metoda equals()pentru Linked. În cadrul acestei metode, verificați dacă șirurile de caractere conținute în ambele obiecte (obiectul curent din iterație și obiectul de găsit) sunt identice. Pentru a face acest lucru, trebuie să utilizați metoda String.equals(String other)metoda

  • Pentru a compara două LinkedLists, scrieți o altă equals() metodă. De data aceasta, pentru LinkedList. În această metodă trebuie să comparați, de exemplu, numărul de elemente din ambele liste. În cazul în care listele conțin același număr de elemente, puteți utiliza metoda definită anterior Linked.equals() pentru a compara listele element cu element.

Comentarii

  • Da, după 5 minute după ce am postat postul meu, m-am gândit la equals(). mulțumiri apropo –  > Por Ernusc.

Tags: