Java ile bağlantılı bir liste yapmanın en iyi yolu nedir?
Java ile bağlantılı bir liste yapmanın en iyi yolu nedir?
Yanıtlar:
Java'ya aşina olan geliştiricilere açık çözüm , java.util dosyasında önceden sağlanan LinkedList sınıfını kullanmaktır . Ancak, bir nedenden dolayı kendi uygulamanızı yapmak istediğinizi varsayalım. İşte listenin başına yeni bir bağlantı ekleyen, listenin başından silen ve içindeki bağlantıları yazdırmak için listede dolaşan bağlı bir listeye hızlı bir örnek. Donanım bu uygulamaya bunu bir hale getirilmesi de yer çift bağlantılı liste için yöntemleri ekleyerek, insert ve silmek ve ekleyerek ortadan veya ucundan olsun ve sıralama sıra yöntemleri.
Not : Örnekte, Link nesnesi aslında başka bir Link nesnesi içermez - nextLink aslında sadece başka bir bağlantıya bir referanstır.
class Link {
public int data1;
public double data2;
public Link nextLink;
//Link constructor
public Link(int d1, double d2) {
data1 = d1;
data2 = d2;
}
//Print Link data
public void printLink() {
System.out.print("{" + data1 + ", " + data2 + "} ");
}
}
class LinkList {
private Link first;
//LinkList constructor
public LinkList() {
first = null;
}
//Returns true if list is empty
public boolean isEmpty() {
return first == null;
}
//Inserts a new Link at the first of the list
public void insert(int d1, double d2) {
Link link = new Link(d1, d2);
link.nextLink = first;
first = link;
}
//Deletes the link at the first of the list
public Link delete() {
Link temp = first;
if(first == null){
return null;
//throw new NoSuchElementException(); // this is the better way.
}
first = first.nextLink;
return temp;
}
//Prints list data
public void printList() {
Link currentLink = first;
System.out.print("List: ");
while(currentLink != null) {
currentLink.printLink();
currentLink = currentLink.nextLink;
}
System.out.println("");
}
}
class LinkListTest {
public static void main(String[] args) {
LinkList list = new LinkList();
list.insert(1, 1.01);
list.insert(2, 2.02);
list.insert(3, 3.03);
list.insert(4, 4.04);
list.insert(5, 5.05);
list.printList();
while(!list.isEmpty()) {
Link deletedLink = list.delete();
System.out.print("deleted: ");
deletedLink.printLink();
System.out.println("");
}
list.printList();
}
}
public Link nextLink
ve sınıf dışında üzerinde çalışan. Ne zaman Link
iç sınıf olacaktı LinkList
. Java'nın yalnızca başka bir c sürümü olduğu için yazılan bir başka kod grubudur.
Java'nın, kontrol etmek isteyebileceğiniz bir LinkedList uygulaması vardır . JDK ve kaynaklarını java.sun.com adresinden indirebilirsiniz .
LinkedList
, sadece olabilir bakışıdır LinkedList.java
çevrimiçi burada . Bu sayfa sözdizimini bile vurgulamaktadır ve Javadoc yorumlarını satır içinde yapar.
Java.util.LinkedList kullanın . Bunun gibi:
list = new java.util.LinkedList()
Yukarıdaki bağlantılı liste ters yönde görüntülenir. Bence ekleme yönteminin doğru uygulanması
public void insert(int d1, double d2) {
Link link = new Link(d1, d2);
if(first==null){
link.nextLink = null;
first = link;
last=link;
}
else{
last.nextLink=link;
link.nextLink=null;
last=link;
}
}
Java.util.LinkedList'i kullanmak çok daha iyi, çünkü yazacağınızdan muhtemelen çok daha optimize edilmiş.
//slightly improved code without using collection framework
package com.test;
public class TestClass {
private static Link last;
private static Link first;
public static void main(String[] args) {
//Inserting
for(int i=0;i<5;i++){
Link.insert(i+5);
}
Link.printList();
//Deleting
Link.deletefromFirst();
Link.printList();
}
protected static class Link {
private int data;
private Link nextlink;
public Link(int d1) {
this.data = d1;
}
public static void insert(int d1) {
Link a = new Link(d1);
a.nextlink = null;
if (first != null) {
last.nextlink = a;
last = a;
} else {
first = a;
last = a;
}
System.out.println("Inserted -:"+d1);
}
public static void deletefromFirst() {
if(null!=first)
{
System.out.println("Deleting -:"+first.data);
first = first.nextlink;
}
else{
System.out.println("No elements in Linked List");
}
}
public static void printList() {
System.out.println("Elements in the list are");
System.out.println("-------------------------");
Link temp = first;
while (temp != null) {
System.out.println(temp.data);
temp = temp.nextlink;
}
}
}
}