Úvod do používání propojených seznamů v Javě

Úvod do používání propojených seznamů v Javě

Datová struktura používá k ukládání, načítání a odstraňování dat různé předdefinované metody, které vyvrcholí vytvořením efektivních programů. Propojený seznam je populární datová struktura, která se skládá ze seznamu uzlů, které jsou propojeny (nebo propojeny).





Jak ale vytvoříte propojený seznam v Javě? Podívejme se.





Jak funguje propojený seznam?

Každý propojený seznam začíná zvláštním uzlem, který je často označován jako „hlava“ a který má za úkol vždy ukazovat na začátek seznamu. Hlava je důležitá, protože každý uzel v propojeném seznamu nemusí fyzicky následovat svého nástupce (to znamená, že předchůdce a nástupce nemusí fyzicky sousedit).





Jako každá datová struktura, propojený seznam usnadňuje vytváření, načítání, vkládání a ničení prostřednictvím sady předdefinovaných funkcí, které může použít každý vývojář.

Vytvoření propojeného seznamu v Javě

Program Java, který je určen k vytváření a manipulaci s propojenými seznamy, bude mít tři charakteristické sekce; třída uzlu, třída propojeného seznamu a ovladač. Ačkoli tyto tři sekce lze kombinovat do jednoho souboru, v informatice existuje princip designu známý jako „oddělení starostí“, který by měl každý vývojář znát.



Zásada oddělení obav vyžaduje, aby byla oddělena každá část kódu, která řeší konkrétní problém. Tento princip vám pomůže vytvořit čistší (čitelnější) kód a je ideální pro vytváření datových struktur.

Prvním krokem při vytváření propojeného seznamu v Javě je vytvoření třídy uzlů. Třída uzlu by měla mít dva atributy; jeden z atributů bude představovat datovou část uzlu, zatímco druhý atribut bude představovat propojenou část. Třída uzlu by měla mít také konstruktor, getry a nastavovače.





Příbuzný: Naučte se vytvářet třídy v Javě

Získavače a nastavovače umožní ostatním třídám (například třídě propojených seznamů) přístup k různým uzlům v propojeném seznamu.





Příklad třídy uzlu

Níže uvádíme příklad třídy uzlů, abyste získali představu o tom, co máme na mysli:


public class Node {
private int Data;
private Node NextNode;
//constructor
public Node() {
Data = 0;
NextNode = null;
}
//getters and setters
public int getData() {
return Data;
}
public void setData(int data) {
Data = data;
}
public Node getNextNode() {
return NextNode;
}
public void setNextNode(Node nextNode) {
NextNode = nextNode;
}
}

V tomto případě bude datový atribut ukládat celočíselné hodnoty. Nyní, když máte třídu uzlů, je čas přejít na propojený seznam.

Příklad propojeného seznamu

Níže je uveden příklad propojeného seznamu v Javě.

public class LinkedList {
private Node Head;
//constructor
public LinkedList() {
Head = null;
}
}

Výše uvedený kód vytvoří propojenou třídu seznamu, ale bez různých operací lze tuto třídu považovat za ekvivalent prázdného shellu. Datová struktura propojeného seznamu má několik operací, které lze použít k naplnění:

  • Vložte vpředu.
  • Vložte do středu.
  • Vsadit vzadu.

Příbuzný: Jak vytvářet datové struktury pomocí tříd JavaScript ES6

Sbírka propojených seznamů metod vkládání je jedním z důvodů, proč se vývojář může rozhodnout použít tuto datovou strukturu nad jinou datovou strukturou, jako jsou zásobníky (což umožňuje pouze vkládání a odstraňování shora).

Použití metody Vložit na přední stranu

Metoda insert at the front, jak název napovídá, vloží nová data (nebo nové uzly) na začátek propojeného seznamu.

Vložte příklad přední metody

Níže je uveden příklad toho, jak byste na začátek seznamu vložili nová data.

//insert node at front method
public void insertAtFront(int key) {
//create a new node using the node class
Node Temp = new Node();
//check if the Temp node was successfully created
//assign the data that was provides by the user to it
if(Temp != null) {
Temp.setData(key);
Temp.setNextNode(null);

//check if the head of the linked list is empty
//assign the node that was just created to the head position
if(Head == null) {
Head = Temp;
}
//if a node is already at the head position
//add the new node to it and set it as the head
else {
Temp.setNextNode(Head);
Head = Temp;
}
}
}

The insertAtFront metoda ve výše uvedeném příkladu umožňuje uživateli přidat do daného propojeného seznamu nové uzly.

Příklad použití vložky na přední straně

Níže je příklad toho, jak byste použili vložku vpředu.

public class Driver {
//executes the program
public static void main(String[] args) {
//create a new linked list called List
LinkedList List = new LinkedList();
//add each value to the front of the linked list as a new node
List.insertAtFront(10);
List.insertAtFront(8);
List.insertAtFront(6);
List.insertAtFront(4);
List.insertAtFront(2);
}
}

The Řidič class (což je název, který je často přiřazen spustitelné třídě v Javě), využívá třídu LinkedList k vytvoření propojeného seznamu pěti sudých čísel. Při pohledu na výše uvedený kód by mělo být snadno vidět, že číslo '2' je na pozici hlavy v propojeném seznamu. Ale jak to můžete potvrdit?

ikona baterie se v systému Windows 10 nezobrazuje

Použití metody Zobrazit všechny uzly

Metoda zobrazení všech uzlů je základní metodou propojeného seznamu. Bez toho vývojář neuvidí uzly v propojeném seznamu. Prochází propojeným seznamem (počínaje od hlavy) a tiskne data uložená v každém uzlu, který tvoří seznam.

Zobrazit všechny uzly Příklad metody

Níže je uveden příklad použití metody zobrazení všech poznámek v Javě.

//display all nodes method
public void displayAllNodes() {
//create a new node call Temp and assign it to the head of the linked list
//if the head has a null value then the linked list is empty
Node Temp = Head;
if (Head == null){
System.out.println('The list is empty.');
return;
}
System.out.println('The List:');

while(Temp != null) {
//print the data in each node to the console(starting from the head)
System.out.print(Temp.getData() + ' ');
Temp = Temp.getNextNode();
}
}

Nyní, když displayAllNodes metoda byla přidána do souboru Spojový seznam třídu můžete zobrazit propojený seznam přidáním jednoho řádku kódu do třídy ovladačů.

Použití příkladu metody Zobrazit všechny uzly

Níže uvidíte, jak byste použili metodu zobrazení všech uzlů.

//print the nodes in a linked list
List.displayAllNodes();

Spuštění výše uvedeného řádku kódu vytvoří v konzole následující výstup:

Seznam:

2 4 6 8 10

Pomocí metody Najít uzel

Existují případy, kdy uživatel bude chtít najít konkrétní uzel v propojeném seznamu.

Například by nebylo praktické, aby banka, která má miliony zákazníků, vytiskla ve své databázi všechny zákazníky, když potřebují vidět pouze podrobnosti o konkrétním zákazníkovi.

Proto místo použití displayAllNodes metoda, efektivnější metodou je najít jediný uzel obsahující požadovaná data. To je důvod, proč je v datové struktuře propojeného seznamu důležité hledání metody s jedním uzlem.

Příklad metody Find Node

Níže je uveden příklad použití metody find node.

//search for a single node using a key
public boolean findNode(int key) {
//create a new node and place it at the head of the linked list
Node Temp = Head;
//while the current node is not empty
//check if its data matches the key provided by the user
while (Temp != null) {
if (Temp.getData() == key) {
System.out.println('The node is in the list');
return true;
}
//move to the next node
Temp = Temp.getNextNode();
}
//if the key was not found in the linked list
System.out.println('The node is not in the list');
return false;
}

S displayAllNodes metodou, potvrdili jste, že Spojový seznam obsahuje 5 sudých čísel od 2 do 10. The findNode výše uvedený příklad může potvrdit, zda je jedním z těchto sudých čísel číslice 4 pouhým zavoláním metody ve třídě ovladače a zadáním čísla jako parametru.

Použití příkladu metody Find Node

Níže je uveden příklad toho, jak byste v praxi používali metodu find node.

//check if a node is in the linked list
List.findNode(4);

Výše uvedený kód vytvoří v konzole následující výstup:

The node is in the list

Použití metody Odstranit uzel

Při použití stejného příkladu banky výše může zákazník v databázi banky chtít uzavřít svůj účet. Zde bude metoda odstranění uzlu užitečná. Je to nejsložitější metoda propojeného seznamu.

Metoda Odstranit uzel vyhledá daný uzel, odstraní tento uzel a propojí předchozí uzel s uzlem, který následuje za uzlem, který byl odstraněn.

Odstranit příklad metody uzlu

Níže je uveden příklad metody odstranění uzlu.

public void findAndDelete(int key) {
Node Temp = Head;
Node prev = null;
//check if the head node holds the data
//and delete it
if (Temp != null && Temp.getData() == key) {
Head = Temp.getNextNode();
return;
}
//search the other nodes in the list
//and delete it
while (Temp != null) {
if (Temp.getNextNode().getData() == key ) {
prev = Temp.getNextNode().getNextNode();
Temp.setNextNode(prev);
return;
}
Temp = Temp.getNextNode();
}
}

Použití příkladu metody Odstranit uzel

Níže je uveden příklad použití metody odstranění uzlu v praxi.

jak hrát minecraft online s přáteli
//delete the node that holds the data 4
List.findAndDelete(4);
//print all nodes in the linked list
List.displayAllNodes();

Použití dvou řádků kódu výše v již existující třídě Driver vytvoří v konzole následující výstup:

The List:
2 6 8 10

Nyní můžete v Javě vytvářet propojené seznamy

Pokud jste se dostali na konec tohoto článku s návodem, dozvěděli jste se:

  • Jak vytvořit třídu uzlů.
  • Jak vytvořit propojenou třídu seznamu.
  • Jak naplnit třídu propojeného seznamu jejími předdefinovanými metodami.
  • Jak vytvořit třídu ovladače a použít různé metody propojeného seznamu k dosažení požadovaného výsledku.

Propojený seznam je jen jednou z mnoha datových struktur, které můžete použít k ukládání, načítání a mazání dat. Když už máte vše, co potřebujete, proč nezkusit tyto příklady sami v Javě?

Podíl Podíl tweet E-mailem Jak vytvářet a provádět operace na polích v Javě

Učit se Javu? Nechejte pole snadno zpracovávat vaše data.

Číst dále
Související témata
  • Programování
  • Jáva
  • Programování
  • Tipy pro kódování
O autorovi Kadeisha Kean(21 článků zveřejněno)

Kadeisha Kean je vývojář softwaru a technický/technologický spisovatel v plném zásobníku. Má výraznou schopnost zjednodušit některé z nejsložitějších technologických konceptů; produkující materiál, kterému každý technologický nováček snadno porozumí. Je nadšená psaním, vývojem zajímavého softwaru a cestováním po světě (prostřednictvím dokumentů).

Více od Kadeisha Kean

Přihlaste se k odběru našeho zpravodaje

Připojte se k našemu zpravodaji a získejte technické tipy, recenze, bezplatné elektronické knihy a exkluzivní nabídky!

Kliknutím sem se přihlásíte k odběru