[英]Creating an variable with the class name as the data type in java
我正在瀏覽互聯網上的鏈表操作代碼,我發現以下代碼片段我無法理解。
class Node
{
int data;
Node node; //reference to the next node
:
:
}
我已經了解了Node node;
line 是對下一個節點的引用,因為鏈表的節點包含下一個節點的數據和地址。
但我無法理解它背后的概念。
如果使用 class 名稱作為數據類型定義變量,任何人都可以解釋什么是 java 概念/理論?
如果使用 class 名稱作為數據類型定義變量,任何人都可以解釋什么是 java 概念/理論?
沒有這樣的概念或理論。
從 Java 語言的角度來看,變量名稱可以是任何名稱,只要它符合所需的語法即可。
從 Java 風格的角度來看,變量名稱應該向讀者傳達含義。 但是由代碼的作者決定如何傳達含義以及需要(明確地)傳達什么/多少含義。
在這種情況下,作者決定他們將簡單地使用node
作為變量名。 除了顯而易見的之外,這沒有任何意義:它是一個“節點”。 此變量的實際預期含義由注釋傳達:
//reference to the next node
但是您可能可以通過閱讀Node
class 中的代碼的 rest 和/或使用 class 的代碼來弄清楚這一點。
對於我們的價值,我可能會調用變量next
而不是node
。 但我可能不會在代碼審查中指出作者的選擇不正確。
作為一般性陳述,對於變量名應該傳達什么和多少含義存在不同的意見。 但是沒有普遍接受的規則。 所以你需要准備好閱讀代碼而不是依賴變量名。
如果代碼很復雜,或者您正在嘗試了解一種新的(對您而言)數據結構,這可能會成為一個問題。 但在后一種情況下,解決方案可能是找到更好的代碼來學習。
例如,任何關於數據結構的好教科書都會有鏈表的示例代碼。 代碼應該寫得更好,並且應該有附帶的文字來解釋它。 如果您不想購買/借用教科書,您可能可以在互聯網上找到更好的示例代碼來學習。
如果使用 class 名稱作為數據類型定義變量,任何人都可以解釋什么是 java 概念/理論?
如果我正確理解您的問題,您會因為聲明一個與它所在的 class 相同類型的變量而感到困惑,對嗎? class Node
具有自身實例作為可變Node node
的事實?
好吧,這里沒有“理論或概念”。 class 可以定義任何已知類型的變量。 class Node
被定義為已知類型。 因此它可以聲明該類型的變量,甚至在它自己內部。
這主要用於具有某種嵌套結構的數據結構。 您已經給出了一個示例,一個引用下一個Node
的節點。
你也可以有一個雙向鏈表:
class Node {
Node previous;
Node next;
}
你可以有一個Directory
class 代表一個文件夾結構:
class Directory {
Directory[] subDirectories;
File[] files;
}
或者一個JSONObject
class ,它包含一個嵌套JSONObject
的鍵/值對
class JSONObject {
Map<String, JSONObject> children;
}
等等等等。
//Node holds reference to Node
class Node{
Node link;
int info;
public Node(){
}
public Node(int info){
this.info=info;
}
public String toString(){
return Integer.toString(info);
}
}
class Linked{
Node head;//head reference denoted the beginning of the linkedlist
private int size=0;
public void add(int info){
if (size==0){
head=new Node(info);
}else{
Node temp=head;
while(temp.link!=null){
temp=temp.link;
}
temp.link=new Node(info);
}
size++;
}
public String toString(){
String str="";
var temp=head;
while(temp!=null){
str+=temp.info+" ";
temp=temp.link;
}
return str;
}
public static void main(String ... $){
Linked link=new Linked();
link.add(10);
link.add(555);
link.add(55);
var out=System.out;
out.println(link);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.