Javaでリンクリストを作成する最適な方法は何ですか?Javaでリンクリストデータ構造を作成するにはどうすればよいですか?
答えて
Javaへのなじみの開発者への明白な解決策は、すでに java.utilので提供LinkedListのクラスを使用することです。しかし、何らかの理由で独自の実装をしたかったとします。ここでは、リストの先頭に新しいリンクを挿入し、リストの先頭から削除し、そのリストに含まれているリンクを印刷するためのリストをループするリンクリストの簡単な例を示します。この実装に強化はを挿入し途中または最後からを削除し、同様とソートメソッドを取得追加することによって、にメソッドを追加し、それダブルリンクリスト行うことを含みます。
注:例では、リンクオブジェクトは、実際には別のリンクオブジェクトが含まれていない - nextLinkは、実際に別のリンクへの参照のみです。それはあなたが書くだろうものよりも、おそらくはるかに最適化されますので、
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();
}
}
intとdoubleを格納するのではなく、データ型にジェネリックを使用するようにこのコードを簡単に改善することもできます。 – shsteimer
@shsteimer:かなり間違いなく、このコードの唯一の良い使い方は技術を実証することであるので、誰にも役立たないでしょう。それは基本的な考え方を拡散するだけです。 –
'public Link nextLink'を持ち、それをクラス外で操作するのは良い方法ではありません。 'Link'が' LinkList'の内部クラスであるとき、それは尊敬することができます。これは、Javaが別のバージョンのof-cであったために書かれた別のコードです。 – Bart
JavaにはLinkedListの実装があり、チェックアウトしたい場合があります。 JDKは、java.sun.comにダウンロードできます。
java.util.LinkedListを使用してください。このように:
list = new java.util.LinkedList()
そのはるかに良いが、java.util.LinkedListを使用します。
これは初めて動作します。 –
上記のリンクリストは反対方向に表示されます。私は、insertメソッドの正しい実装が
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;
}
}
別途記載のない限り、最後に追加します。 :-) –
//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;
}
}
}
}
- 1. C++できれいなカスケード構造を作成するにはどうすればよいですか?
- 2. 設定のようなナビゲーション構造を作成するにはどうすればよいですか?
- 3. null値をサポートする構造体を作成するにはどうすればよいですか?
- 4. RでWindowsエクスプローラと同様のディレクトリ構造を作成するにはどうすればよいですか?
- 5. ClojureでCスタイルの構造体を作成するにはどうすればよいですか?
- 6. 角2ネストされた構造を作成するにはどうすればよいですか?
- 7. このデータ構造からグラフを作成するにはどうすればよいですか?
- 8. Javaでハッシュテーブルを作成するにはどうすればよいですか?
- 9. Javaでオーディオストリーマーを作成するにはどうすればよいですか?
- 10. Javaでオンスクリーンキーボードを作成するにはどうすればよいですか?
- 11. 参照ベクトルを使用して構造体を作成するにはどうすればよいですか?
- 12. 偽のディレクトリ構造を作成して使用するにはどうすればよいですか?
- 13. PostgreSQLデータベースの構造を知るにはどうすればよいですか?
- 14. 構造体へのポインタとして構造体をマーシャリングするにはどうすればよいですか?
- 15. reduxで「サブアプリケーション」を構成するにはどうすればよいですか?
- 16. Oracleでクエリを構成するにはどうすればよいですか?
- 17. データベースのテーブルからツリー構造を生成するにはどうすればよいですか?
- 18. ウェブページ上に広告の構造を形成するにはどうすればよいですか?
- 19. Rails - アプリビューファイルを構造化するにはどうすればいいですか?
- 20. Javaの構造体のような構造体を作成する
- 21. CanCanの機能を他のモデルに基づいて作成を制御するように構造化するにはどうすればよいですか?
- 22. アウトオブプロセスセッションプロバイダを構成するにはどうすればよいですか? (ASP.NET - IIS7)
- 23. Maven:Jboss、Tomcatなどの構造を持つJavaアプリケーションを作成するにはどうすればよいですか?
- 24. ウェブサービスアプリの作成にはどうすればよいですか?
- 25. Android、XMLビューファイル、Javaのバックエンド、バックエンドJavaでカスタムビューを作成するにはどうすればよいですか?
- 26. プログラムからJavaファイルからJavaクラスファイルを作成するにはどうすればよいですか?
- 27. Javaサーブレットでasp.netで作成されたCookieを取得するにはどうすればよいですか?
- 28. このような地図構造を更新するにはどうすればよいですか?
- 29. AndroidでJavaで新しい連絡先を作成するにはどうすればよいですか?
- 30. Android/Javaでプログラムで新しいスプレッドシートを作成するにはどうすればよいですか?
リンクリストを作るための最善の方法は、リンクされたリストに組み込まれて使用することであるべきだと思います。組み込みのクラスを書き直さないでください。 –
この質問は正当であり、プログラマの話し合いのために建設的です。 – anshulkatta