linked list java linked list implementation java examples
Bu Öğretici, Java'da Bağlantılı Liste Veri Yapısının Ne Olduğunu ve Bir Java Bağlantılı Listenin Nasıl Oluşturulacağını, Başlatılacağını, Uygulanacağını, Geçiş Yapılacağını, Tersine Döndürüleceğini ve Sıralanacağını Açıklar:
Java'da bir LinkedList, öğeleri bitişik olmayan bir konumda depolayan bir veri yapısıdır. Doğrusal bir veri yapısıdır.
Her veri öğesine 'Düğüm' adı verilir ve her düğümün bir veri bölümü ve bir adres bölümü vardır. Adres bölümü, BağlantılıListedeki sonraki düğüme olan bağlantıyı saklar.
=> Java Eğitim Serisini Herkes İçin Görmek İçin Burayı Ziyaret Edin.
Ne öğreneceksin:
- Java'da LinkedList
- Java LinkedList Sınıfı
- Java'da Bağlantılı Liste Nasıl Oluşturulur
- Java'da Bağlantılı Liste Uygulaması
- Bağlantılı Listeyi Java'da Gezin / Yazdır
- LinkedList Yöntemleri
- Java'da Ters Bağlantılı Liste
- Bağlantılı Listeyi Java'da Sıralama
- Yinelenenleri Kaldır
- Java'da Dairesel Bağlantılı Liste
- Java 8 LinkedList
- Sıkça Sorulan Sorular
- Sonuç
Java'da LinkedList
Aşağıda LinkedList'in genel Düzeni verilmiştir:
LinkedList'in yukarıdaki temsilinde gösterildiği gibi LinkedList'teki her öğe 'Node' dur. Her düğümün iki bölümü vardır, birinci bölüm verileri depolar ve ikinci bölüm LinkedList'teki sonraki düğümün bir referansı veya işaretçisine veya adresine sahiptir.
bir iş analisti için mülakat soruları
LinkedList'teki veriler, Dizilerden farklı olarak bitişik olmayan yerlerde depolandığından, bu düzenleme gereklidir.
LinkedList'in 'Head', LinkedList'teki ilk elemanın adresini içeren bir göstericidir. LinkedList'teki son düğüm kuyruktur. Yukarıdaki şekilde gösterildiği gibi, LinkedList'teki son düğümün adres kısmı LinkedList'in sonunu belirten 'Null' olarak ayarlanır.
Yukarıdaki diyagram bir ' Tek bağlantılı Liste LinkedList'te yalnızca sonraki düğümün adresini saklayan '.
' Çift Bağlantılı Liste 'Her düğümü üç bölümden oluşur:
- LinkedList'teki önceki öğeye adres veya başvuru veya işaretçi.
- Veri bölümü
- LinkedList'teki sonraki öğeye adres veya başvuru veya işaretçi.
LinkedList'teki ilk öğenin önceki adresi Null olarak ayarlanırken LinkedList'teki Last öğesinin bir sonraki göstericisi Null olarak ayarlanır.
Çift Bağlantılı Listenin Temsili:
Yukarıdaki gösterimde gösterildiği gibi, çift bağlantılı listedeki her düğüm, önceki ve sonraki düğüme işaretçiler içerir (bu nedenle oklar olmadan gösterilir). İlk düğümün önceki işaretçisi null'a işaret ederken, son düğümün bir sonraki işaretçisi null'u gösterir.
Bu LinkedList eğitiminde, çoğunlukla tekil bağlantılı liste ile ilgileneceğiz. Bir sonraki eğitimimizde çift bağlantılı listeyi tartışacağız.
Java LinkedList Sınıfı
Java'da, bağlantılı liste ' Bağlantılı liste ' sınıf. Bu sınıf, ' java.util ”Paketi. LinkedList sınıfı List ve Deque arabirimlerini uygular ve AbstractList sınıfını miras alır.
LinkedList sınıfının sınıf hiyerarşisi aşağıda verilmiştir.
Yukarıdaki diyagram LinkedList sınıfının hiyerarşisini gösterir. Gösterildiği gibi LinkedList sınıfı List ve Deque arayüzlerini uygular.
Daha önce de belirtildiği gibi LinkedList sınıfı, ' java.util ”Paketi. Bu nedenle, programınıza aşağıdaki ifadelerden birini ekleyerek programınızda LinkedList sınıfını kullanabilmelisiniz.
import java.util.*;
Veya
import java.util.LinkedList;
Dolayısıyla, yukarıdaki hiyerarşiye dayalı olarak, LinkedList sınıfının tipik bir tanımı aşağıdaki gibidir:
public class LinkedList extends AbstractSequentialList implements List, Deque, Cloneable, Serializable
Aşağıda, LinkedList sınıfının hatırlamanız gereken özelliklerinden bazıları listelenmiştir:
- Bu sınıf senkronize edilmemiştir.
- Yinelenen değerlere izin verir.
- Ekleme siparişini saklar.
- Elemanların hareket ederken kaydırılması gerekmediğinden, içindeki elemanların manipülasyonu daha hızlıdır.
- Bu sınıf bir yığın, sıra ve liste uygulamak için kullanılabilir.
Java'da Bağlantılı Liste Nasıl Oluşturulur
Java'da bir bağlantılı liste oluşturmaya geçmeden önce, önce Java'da bağlantılı bir liste düğümünü tartışalım.
Daha önce tartışıldığı gibi, bağlantılı bir liste düğümlerden oluşur. Böylece Java'da, bir LinkedList'i ayrı bir sınıf olarak Node'u ile bir sınıf olarak temsil edebiliriz. Dolayısıyla bu sınıfın Node tipine bir referansı olacaktır.
Bu, aşağıdaki gibi gösterilmiştir:
class LinkedList { Node head; // list head //node - linkedlist class Node { int data; Node next; Node(int d) { data = d; } //constructor to create a new node } }
LinkedList türünde bir nesne oluşturmak için aşağıdaki gibi iki ana yapıcı vardır:
# 1) BağlantılıListe ()
Bu kurucu için genel sözdizimi şöyledir:
LinkedList linkedList = new LinkedList();
Yukarıdaki ifade boş bir LinkedList oluşturur.
Örneğin,
LinkedList l_list = new LinkedList();
Bu, l_list adında boş bir bağlantılı liste oluşturacaktır.
# 2) LinkedList (Koleksiyon c)
Genel sözdizimi şöyledir:
LinkedList linkedList = new LinkedList (Collection c);
Yukarıdaki ifade, başlangıç öğeleri olarak c koleksiyonundan öğeler içeren bir LinkedList oluşturur.
Daha önce gördüğümüz diğer liste veri yapıları gibi, bağlantılı liste de add yöntemi, Arrays.asList () yöntemi veya yapıcıyı bağımsız değişken olarak koleksiyonla kullanarak başlatılabilir.
Java'da Bağlantılı Liste Uygulaması
Aşağıda, Java'daki LinkedList veri yapısının basit bir örneği verilmiştir. Bu uygulama örneğinde, LinkedList nesnelerini başlatmak için add yöntemini ve asList yöntemini kullanacağız.
import java.util.*; public class Main{ public static void main(String() args) { //create a LinkedList object and initialize it with Array elements converted to list LinkedList intList = new LinkedList<>(Arrays.asList(10,20,30,40,50)); //print the LinkedList just created System.out.println('Contents of first LinkedList: ' + intList); //create an empty list LinkedList colorsList = new LinkedList<>(); //add elements to the linkedList using add method. colorsList.add('Red'); colorsList.add('Green'); colorsList.add('Blue'); colorsList.add('Cyan'); colorsList.add('Magenta'); // print the LinkedList System.out.println('
Contents of second LinkedList: ' + colorsList); } }
Çıktı:
İlk LinkedList'in içeriği: (10, 20, 30, 40, 50)
İkinci LinkedList'in içeriği: (Kırmızı, Yeşil, Mavi, Cam Göbeği, Macenta)
Yukarıdaki program LinkedList'in oluşturulmasını ve başlatılmasını göstermektedir. İlk olarak, Tamsayı türünde bir LinkedList oluşturuyoruz ve LinkedList için başlangıç değerleri olarak asList yöntemini kullanarak listeye dönüştürülmüş bir Tamsayı dizisi sağlıyoruz.
Ardından, String türünde boş bir LinkedList oluşturuyoruz ve ardından add yöntemini kullanarak LinkedList'e değerler ekliyoruz.
Son olarak, LinkedList nesnelerinin ikisini de bir dizge olarak görüntülüyoruz.
Bağlantılı Listeyi Java'da Gezin / Yazdır
LinkedList öğelerinin içeriğini yazdırmak veya üzerinde herhangi bir işlem gerçekleştirmek için, öğeleri arasında geçiş yapmanız gerekir. Bu yöntemleri daha önceki eğitimlerimizde görmüştük. Bu bölümde, LinkedList ile ilgili olarak her birinin örneklerini tartışacağız.
For döngüsü kullanma
import java.util.LinkedList; class Main { public static void main(String() args) { // Create a LinkedList and initialize it LinkedList colorList = new LinkedList<>(); colorList.add('Red'); colorList.add('Green'); colorList.add('Blue'); // Using for loop,print the contents of the LinkedList System.out.println('LinkedList elements using for loop:'); for(int i=0; i Çıktı:
For döngüsü kullanan LinkedList öğeleri:
kırmızı yeşil mavi
ForEach Loop'u kullanma
import java.util.LinkedList; class Main { public static void main(String() args) { // Create a LinkedList and initialize it LinkedList colorList = new LinkedList<>(); colorList.add('Red'); colorList.add('Green'); colorList.add('Blue'); // Using forEach loop,print the contents of the LinkedList System.out.println('LinkedList elements using forEach loop:'); for(String color:colorList) { System.out.print(color + ' '); } } }
Çıktı:
ForEach döngüsünü kullanan LinkedList öğeleri:
kırmızı yeşil mavi
Yineleyiciyi Kullanma
import java.util.*; public class Main{ public static void main(String args()){ //declare a LinkedList object LinkedList l_list=new LinkedList(); //Add elements to LinkedList l_list.add('Red'); l_list.add('Green'); l_list.add('Blue'); l_list.add('Yellow'); //declare an iterator for the LinkedList Iterator itr=l_list.iterator(); System.out.println('The contents of Linked List:'); //Iterate through the LinkedList using Iterator and print its elements while(itr.hasNext()){ System.out.print(itr.next() + ' '); } } }
Çıktı:
Bağlantılı Listenin içeriği:
Kırmızı Yeşil Mavi Sarı
güvenlik anahtarını nerede bulabilirim
LinkedList Yöntemleri
LinkedList sınıfı, Bağlantılı listeyi işlemek için çeşitli yöntemleri destekleyen API sağlar. Aşağıdaki LinkedList API'deki yöntemleri tablo haline getirdik.
Aşağıdaki bölümde ana işlemleri / yöntemleri tartışacağız.
Yöntem Prototip Açıklama Açık void temizle () Listedeki tüm öğeleri siler. Ekle boole toplamı (E e) LinkedList'e belirli bir öğe ekleyin void add (int indeksi, E öğesi) LinkedList'te verilen dizine eleman ekle Hepsini ekle boole addAll (Koleksiyon c) LinkedList'in sonuna verilen c koleksiyonunun öğelerini ekler. boole addAll (int dizin, Koleksiyon c) LinkedList'te belirtilen dizine verilen c koleksiyonunun öğelerini ekler addFirst void addFirst (E e) Verilen öğeyi LinkedList'e ilk öğe olarak ekleyin. addLast void addLast (E e) Verilen öğeyi listenin sonuna ekleyin. Klon Nesne klonu () LinkedList'in basit bir kopyasını oluşturur İçerir Boole, (Object o) içerir Listenin belirtilen öğeleri içerip içermediğini kontrol eder; evet ise doğru döndürür. descendingIterator Yineleyici azalan Yineleyici () LinkedList için ters sıralı bir yineleyici döndürür. Eleman E öğesi () Listenin başındaki öğeyi döndürür. Almak E get (int indeksi) Belirtilen dizindeki öğeyi alır. getFirst E getFirst () LinkedList'teki ilk öğeyi alır. getLast E getLast () LinkedList'teki son öğeyi alır. indeksi Int indexOf (Nesne o) Listede verilen elemanların ilk oluşumunun dizinini bulun ve dizini döndürün. Öğe bulunmazsa -1. lastIndexOf Int lastIndexOf (Nesne o) LinkedList içinde belirli bir elemanın son oluşumunun konumunu verir; eğer verilen eleman yoksa -1 listIterator ListIterator listIterator (int dizin) Bağlantılı listedeki belirtilen dizinden listIterator öğesini döndürür. Teklif boole teklifi (E e) Verilen öğeyi LinkedList'e son öğe (kuyruk) olarak ekler. OfferFirst Boole teklifi İlk (E e) Verilen öğeyi LinkedList'e ilk öğe olarak ekler. teklif Boole teklifiSon (E e) LinkedList'in sonuna belirtilen e öğesini ekleyin. Dikizlemek E gözetleme () Kaldırmadan listenin başını döndürür. PeekFirst E peekFirst () Listedeki ilk öğeyi döndürür. Liste boşsa null döndürür. peekLast E peekLast () Liste boşsa, son öğeyi veya null değerini döndürür. Elemanı silmez. Anket E anketi () LinkedList'in başını döndürür ve ayrıca kaldırır. anket E anket İlk () Listedeki ilk öğeyi döndürür ve siler; liste boşsa null döndürür. anket E anketSon () Listedeki son öğeyi döndürür ve siler; Liste boşsa null döndürür. Pop E pop () LinkedList'in yığın gösteriminden öğeyi açar. it Boşluk itme (E e) LinkedList'in yığın gösterimine bir öğe iter veya ekler. Kaldırmak E kaldır () LinkedList'in başını kaldırır ve döndürür. E kaldır (int dizini) LinkedList'ten verilen dizindeki öğeyi siler. boole kaldır (Object o) LinkedList'ten verilen elemanın ilk oluşumunu siler. removeFirst E removeFirst () Listedeki ilk öğeyi döndürür ve siler. removeFirstOccurence boolean removeFirstOccurrence (Nesne o) Liste baştan kuyruğa geçerken, verilen elemanın listeden ilk geçtiği yeri siler. removeLast E kaldırSon () LinkedList içindeki son öğeyi döndürür ve ayrıca siler. removeLastOccurence boolean removeLastOccurrence (Nesne o) Baştan kuyruğa geçerken LinkedList'ten belirli öğenin son oluşumunu kaldırır Ayarlamak E seti (int indeksi, E öğesi) Verilen dizinde verilen elemanı ayarlar. Mevcut öğeyi yenisiyle değiştirir. Boyut İç boyut () LinkedList içindeki öğelerin boyutunu veya sayısını verir sıralamak Nesne () toArray () LinkedList'i tüm liste öğelerini uygun sırayla içeren bir diziye dönüştürür T () toArray (T () a) LinkedList'i, a argümanıyla aynı çalışma zamanı türüne sahip bir diziye dönüştürür.
Aşağıdaki Java programı, yukarıda listelediğimiz çeşitli yöntemleri göstermektedir.
import java.util.*; public class Main { public static void main(String args()) { //create a linked list LinkedList l_list = new LinkedList(); // Add elements to linkedList using various add methods l_list.add('B'); l_list.add('C'); l_list.addLast('G'); l_list.addFirst('A'); l_list.add(3, 'D'); l_list.add('E'); l_list.add('F'); //print the linkedList System.out.println('Linked list : ' + l_list); //Create and initialize an ArrayList ArrayList aList = new ArrayList<>(); aList.add('H'); aList.add('I'); //add the ArrayList to linkedList using addAll method l_list.addAll(aList); //print the linkedList System.out.println('Linked list after adding ArrayList contents: ' + l_list); // use various remove methods to remove elements from linkedList l_list.remove('B'); l_list.remove(3); l_list.removeFirst(); l_list.removeLast(); //print the altered list System.out.println('Linked list after deletion: ' + l_list); // use contains method to check for an element in the linkedList boolean ret_value = l_list.contains('G'); //print the results of contains method if(ret_value) System.out.println('List contains the element 'G' '); else System.out.println('List doesn't contain the element 'G''); // use size methods to return Number of elements in the linked list int size = l_list.size(); System.out.println('Size of linked list = ' + size); // Get and set elements from linked list Object element = l_list.get(3); System.out.println('Element returned by get() : ' + element); l_list.set(3, 'J'); System.out.println('Linked list after change : ' + l_list); //convert linkedList to Array using toArray methods String () list_array = l_list.toArray(new String(l_list.size())); System.out.println('Array obtained from linked List:' + Arrays.toString(list_array)); } }
Çıktı:
Bağlantılı liste: (A, B, C, D, G, E, F)
ArrayList içeriklerini ekledikten sonra bağlantılı liste: (A, B, C, D, G, E, F, H, I)
Silme sonrası bağlantılı liste: (C, D, E, F, H)
Liste 'G' öğesini içermiyor
Bağlantılı listenin boyutu = 5
Get () ile döndürülen öğe: F
Değişiklikten sonra bağlantılı liste: (C, D, E, J, H)
Bağlantılı Listeden elde edilen dizi: (C, D, E, J, H)
Yukarıdaki program LinkedList sınıfının çeşitli yöntemlerini göstermektedir. İlk olarak, String türünde bir LinkedList bildiriyoruz. Daha sonra LinkedList'i değerlerle doldurmak için add, andFirst, addLast, addAll, vb. Gibi add yönteminin çeşitli sürümlerini kullanırız.
Burada öğeyi doğrudan listenin sonuna ekleyebilir veya öğeyi listede belirtilen bir konuma ekleyebiliriz.
Listenin başına bir öğe eklemek için addFirst yöntemini ve listenin sonuna bir öğe eklemek için addLast yöntemini de kullanıyoruz. Ardından LinkedList üzerinde remove, removeFirst, removeLast vb. Kaldırma işlemlerini gerçekleştiriyoruz.
Kaldırma yöntemi için, kaldırılacak öğeyi belirtebiliriz ya da indeksi veya elemanın kaldırılacağı LinkedList içindeki konumu belirleyebiliriz. RemoveFirst ve removeLast yöntemleri, sırasıyla listedeki ilk ve son öğeyi kaldırır.
Ardından, listeyi içeren yöntemi kullanarak belirli bir elemanı ararız. Daha sonra, LinkedList'in boyutunu veya uzunluğunu almak için size () yöntemini kullanıyoruz. Daha sonra listedeki belirli bir dizindeki değeri almak için get / set yöntemlerini kullanırız ve ardından listedeki belirli bir konumdaki bir değeri değiştiririz.
Son olarak, LinkedList'i, toArray yöntemini kullanarak bir Array'e dönüştürüyoruz.
Java'da Ters Bağlantılı Liste
Java'da bağlantılı bir listeyi tersine çevirmek için, liste için bir ters yineleyici döndüren 'descendingIterator ()' yöntemini kullanırız. Daha sonra bu yineleyiciyi liste ve görüntüleme öğeleri arasında gezinmek için kullanabiliriz.
Aşağıdaki program, descendingIterator () yöntemini kullanarak bağlantılı listeyi ters çevirir.
import java.util.*; public class Main{ public static void main(String args()){ //create a LinkedList object LinkedList l_list=new LinkedList(); l_list.add('Pune'); l_list.add('Mumbai'); l_list.add('Nagpur'); System.out.println('Linked List : ' + l_list); System.out.println('Linked List in reverse order:'); //use descendingIterator method to get a reverse iterator Iterator iter=l_list.descendingIterator(); //traverse the list using iterator and print the elements. while(iter.hasNext()) { System.out.print(iter.next() + ' '); } } }
Çıktı:
Bağlantılı Liste: (Pune, Mumbai, Nagpur)
Ters sırada Bağlı Liste:
Nagpur Mumbai Pune
Yukarıdaki programda, bağlantılı bir liste açıklıyoruz ve sonra yazdırıyoruz. Sonra bir ters yineleyici alırız ve onu kullanarak listeye adım atar ve her bir öğeyi görüntüleriz. Çıktı, bağlantılı Liste içeriklerini, önce öğelerin eklenme sırasına göre gösterir ve ardından çıktı, içerikleri ters sırada gösterir.
Bağlantılı Bir Listeyi Java'da Sıralama
LinkedList sınıf nesneleri, Collections.sort () yöntemi kullanılarak sıralanabilir. Bu yöntem, karşılaştırıcı kullanan veya kullanmayan iki versiyon sağlar. Collections.sort () yöntemi karşılaştırıcı olmadan çağrıldığında, koleksiyon doğal düzende sıralanır.
Ne zaman karşılaştırıcı bu yöntemle kullanıldığında, ComparTo yöntemini geçersiz kılarak kendi sıralama ölçütlerimizi tanımlayabiliriz.
Aşağıdaki Java programı, Collections.sort () kullanarak LinkedList'i sıralar. Burada dizileri doğal sıralama ve bir karşılaştırıcı kullanarak sıralıyoruz.
import java.util.*; public class Main{ public static void main(String args()) { // create and initialize the LinkedList object LinkedList l_list = new LinkedList<>(); l_list.add('Jan'); l_list.add('Feb'); l_list.add('Mar'); l_list.add('Apr'); l_list.add('May'); l_list.add('Jun'); //print original unsorted linkedlist System.out.println('Original LinkedList (unsorted): ' + l_list); // sort LinkedList with Collecitons.sort() method in natural order Collections.sort(l_list); System.out.println('
LinkedList (sorted in natural order): ' + l_list); // sort LinkedList using Collection.sort() and Comparator in Java Collections.sort(l_list, new Comparator() { @Override public int compare(String s1, String s2) { return s1.length() - s2.length(); } } ); System.out.println('LinkedList (sorted using Comparator): ' + l_list); } }
Çıktı:
Orijinal Bağlantılı Liste (sıralanmamış): (Ocak, Şubat, Mart, Nisan, Mayıs, Haziran)
LinkedList (doğal sırayla sıralanmıştır): (Nis, Şub, Oca, Haz, Mar, May)
LinkedList (Karşılaştırıcı kullanılarak sıralanmıştır): (Nis, Şub, Oca, Haz, Mar, May)
Yinelenenleri Kaldır
Yinelenenleri kaldırmak için, her bir düğümü çaprazlamanız ve bir sonraki düğümle karşılaştırmanız gerekir. Her iki düğüm de aynıysa, o zaman bir düğümü atlar ve diğerine geçeriz.
Bu şekilde, her bir düğümün üzerinden geçtikten ve yinelenen düğümlerden kurtulduktan sonra, yinelenen öğeler içermeyen sonuç listeyi elde edeceğiz.
Aşağıda, kopyaları kaldırmak için bir Java programı verilmiştir.
class LinkedList_Duplicate { //A class to represent node in linkedlist class Node{ int data; Node next; public Node(int data) { this.data = data; this.next = null; } } //Initially the head and tail of the linked list set to null public Node head = null; public Node tail = null; //add a new node to the linkedlist public void addNode(int data) { //Create new node Node newNode = new Node(data); //If list is empty set head and tail to new node if(head == null) { head = newNode; tail = newNode; } else { // add newNode after the tail tail.next = newNode; //newNode is now the tail or last element tail = newNode; } } //scans the linkedlist and removes duplicate nodes public void removeDuplicateNodes() { //Head is the current node Node current = head, index = null, temp = null; //head = null means list is empty if(head == null) { return; } //traverse through the list else { while(current != null){ //temp node points to previous node to index. temp = current; //Index will point to node next to current index = current.next; while(index != null) { //Check if current node's data is equal to index node's data if(current.data == index.data) { //since node is duplicate skip index and point to next node temp.next = index.next; } else { //Temp will point to previous node of index. temp = index; } index = index.next; } current = current.next; } } } //print the linked list public void print() { //Node current will point to head Node current = head; if(head == null) { System.out.println('List is empty'); return; } while(current != null) { //Print each node by incrementing pointer System.out.print(current.data + ' '); current = current.next; } System.out.println(); } }class Main{ public static void main(String() args) { LinkedList_Duplicate l_List = new LinkedList_Duplicate(); //Add data to the list l_List.addNode(1); l_List.addNode(1); l_List.addNode(2); l_List.addNode(3); l_List.addNode(5); l_List.addNode(2); l_List.addNode(1); l_List.addNode(1); //print the original list System.out.println('Original Linkedlist: '); l_List.print(); //Removes duplicate nodes l_List.removeDuplicateNodes(); //print the altered list without duplicates System.out.println('LinkedList after removing duplicates: '); l_List.print(); } }
Çıktı:
Orijinal Bağlantılı Liste:
1 1 2 3 5 2 1 1
Yinelenenleri kaldırdıktan sonra LinkedList:
1 2 3 5
Yukarıdaki programda, kopyaları kaldırmak için oluşturulmuş bağlantılı bir liste sınıfımız var. Ayrıca her düğümü tanımlayacak bir sınıfımız var. Başka bir deyişle, listedeki düğümler bu sınıf düğümünün nesneleridir. Düğümü bağlantılı bir listeye eklemek için bir yöntemimiz var.
Daha sonra removeDuplicate yönteminde, bağlı listedeki her düğümden baştan başlayarak geçip, birbirini izleyen her düğümü kopya için karşılaştırırız. Bir kopya bulunursa, o düğümü atlar ve bir sonraki düğüme geçeriz.
Bu şekilde ist, yinelenen düğümler atlanarak oluşturulur ve değiştirilen liste print () yöntemi kullanılarak yazdırılır.
Java'da Dairesel Bağlantılı Liste
Dairesel bağlantılı liste, kuyruğu veya son düğümü başa veya ilk düğüme geri bağlanan bir listedir.
Aşağıdaki diyagram Java'da Dairesel Bağlantılı Listeyi göstermektedir.
Yukarıdaki diyagramda gösterildiği gibi, bağlı listenin son düğümünün veya kuyruğunun adres kısmı boş olarak ayarlanmamıştır. Bunun yerine, listenin ilk düğümüne veya başına işaret eder ve böylece dairesel bir bağlantılı liste oluşturur.
Aşağıdaki program, bağlantılı listenin tek tek düğümlerini değiştirmemiz gereken döngüsel bağlantılı bir liste uygular.
class CircularLinkedList { //Node definition for circular linked list public class Node{ int data; Node next; public Node(int data) { this.data = data; } } //Initially head and tail pointers point to null public Node head = null; public Node tail = null; //add new node to the circular linked list public void add(int data){ //Create new node Node newNode = new Node(data); //check if list is empty if(head == null) { //head and tail point to same node if list is empty head = newNode; tail = newNode; newNode.next = head; } else { //tail points to new node if list is not empty tail.next = newNode; //New node becomes new tail. tail = newNode; //tail points back to head tail.next = head; } } //Display the nodes in circular linked list public void displayList() { Node current = head; if(head == null) { System.out.println('The List is empty'); } else { System.out.println('Circular linked list nodes: '); do{ //Print each node of the linked list System.out.print(current.data + ' '); current = current.next; }while(current != head); System.out.println(); } } } class Main{ public static void main(String() args) { //create a CircularLinkedList object CircularLinkedList c_list = new CircularLinkedList(); //Add data to the list c_list.add(10); c_list.add(20); c_list.add(30); c_list.add(40); //Display the nodes in circular linked list c_list.displayList(); } }
Çıktı:
Dairesel bağlantılı liste düğümleri:
10 20 30 40
Java 8 LinkedList
Java 8'de LinkedList sınıfına özel olarak eklenen daha fazla özellik olmamasına rağmen, yine de verileri işlemek için akışlar tanıttı.
Aşağıdaki program LinkedList'i görüntülemek için Java 8 akışının kullanımını göstermektedir.
import java.util.LinkedList; import java.util.List; public class Main { public static void main(String() args) { //create a LinkedList and initialize it to values List colorsList = new LinkedList<>(); colorsList.add('Red'); colorsList.add('Green'); colorsList.add('Blue'); colorsList.add('Cyan'); colorsList.add('Magenta'); //convert List to stream & print it System.out.println('The contents of LinkedList:'); colorsList.stream().forEach(System.out::println); } }
Çıktı:
LinkedList içeriği:
Ağ
Yeşil
Mavi
Mavi
Eflatun
Sıkça Sorulan Sorular
S # 1) Bağlantılı Liste Java'da ne zaman kullanılır?
Cevap: Modifikasyon işlemlerinde ArrayList gibi koleksiyonlardan daha hızlı olduğu için sık ekleme / silme işlemi gerektiren uygulamalarda kullanılmalıdır. Çoğunlukla salt okunur verilere sahip uygulamalar için ArrayList veya benzer koleksiyonlar kullanılabilir.
S # 2) ListNode nedir?
Cevap: Bir ListNode, Java'daki bağlantılı bir listeyle ilişkili temel bir sınıftır ve tek bir öğe veya bir düğümle ilişkili bilgileri temsil eder. Her ListNode, verilerden ve bir sonraki öğeye bir işaretçi veya referanstan oluşur.
S # 3) Bağlantılı Liste boş değerlere izin veriyor mu?
Cevap: Evet, bağlantılı liste herhangi bir sayıda boş değere izin verir.
S # 4) Bağlantılı Listenin Avantajları Nelerdir?
Cevap: Avantajlardan bazıları şunlardır:
- Ekleme, silme gibi manipülasyon işlemleri daha hızlıdır.
- Bağlı bir liste için önceden bellek ayırmaya gerek yoktur ve bu nedenle verimli bellek kullanımına neden olur.
- Daha hızlı erişim süresi sağlar ve bellek için ek yük olmadan sabit zamanda genişletilebilir.
- Dinamik bir veri yapısıdır
- Eklenen veya silinen değerlere bağlı olarak çalışma zamanında büyür ve küçülür.
S # 5) Bağlantılı Listenin Uygulaması nedir?
Cevap: En çok aşağıdaki uygulamalarda kullanılmaktadır:
- MS-Word, Photoshop vb. Yazılımlarda 'geri alma' işlevini uygulamak için
- Yığın ve kuyruk gibi veri yapılarını uygulamak için.
- Bağlantılı bir liste kullanarak grafikleri de uygulayabiliriz.
- Kova karma oluşturma için her bir kova, bağlantılı bir liste olarak uygulanabilir.
S # 6) Bağlantılı Listenin Sınırlamaları Nelerdir?
Cevap: Bazı sınırlamalar şunlardır:
json dosyası ne açabilir
- Her düğümde bir sonraki öğenin referansını tutan ek bir işaretçi ile, kullanılan bellek dizilerden çok daha fazlasıdır.
- Bu, kesinlikle sıralı olarak erişilen bir veri yapısıdır, bu nedenle bağlantılı listenin düğümleri her zaman baştan okunmalıdır.
- Özellikle tekil bağlantılı listelerde geriye doğru gitmek zordur.
- Düğümler bitişik olmayan yerlerde depolandığından, erişim için gereken süre yüksek olabilir.
Sonuç
Bu eğitimde, temel bağlantılı liste veri yapısını öğrendik. Daha sonra Java ile sağlanan java.util.LinkedList sınıfına geçtik. Bu sınıfı kurucuları, yöntemleri vb. Dahil ayrıntılı olarak tartıştık.
Ayrıca, sıralama, bir listeyi tersine çevirme, kopyaları kaldırma, döngüsel bağlantılı liste vb.Gibi Bağlı listelerle ilgili bazı özel işlemleri de tartıştık.
Bir sonraki eğitimimizde, çift bağlantılı listenin belirli özelliklerini tartışacağız.
=> Tam Java Eğitim Kılavuzunu Buradan İnceleyin.
Önerilen Kaynaklar
- Java'da Çift Bağlantılı Liste - Uygulama ve Kod Örnekleri
- Java Listesi - Java'da Liste Nasıl Oluşturulur, Başlatılır ve Kullanılır
- Java Liste Yöntemleri - Listeyi Sırala, İçerir, Liste Ekle, Liste Kaldır
- Java'da İkili Arama Algoritması - Uygulama ve Örnekler
- Java'da Ekleme Sıralama - Ekleme Sıralama Algoritması ve Örnekler
- Java Arayüzü ve Örneklerle Soyut Sınıf Eğitimi
- Resimli C ++ 'da Bağlantılı Liste Veri Yapısı
- Java'da Dizi ve Diğer Koleksiyonlar İçin Gizli Liste