關於java中指針的概念


今天寡人遇到一個問題,掃描非關系數據庫中的圖(由node和rel組成),將其轉化成由寡人自定義的gnode和gedge組成的圖。

gnode類包含結點的id,label和包含此gnode的gedge的鏈表;gedge類包含gnode類型的startnode和endnode。

寡人伏案敲打鍵盤,不到一盞燈的時間里便寫出了一個遞歸的深度優先遍歷算法,心中不免感到被自己的才智深深的折服。

但寡人發覺有哪里不太對,寡人在紙上畫一例以試之,發現果然有問題:

為避免重復掃描相同的node,在處理此node之前必先探測其是否存在於轉化完成的gnode鏈表中,若存在則直接return此gnode,不存在才進行后續處理;

如前所述,gnode包含一個gedge鏈表,在生成其中每個gedge時,必先有其startnode和endnode。顯然,此gnode是其中一個,另一個我們要對這個rel連接的node調用本算法得到,謂之遞歸。

於是,為了探測此node可曾被掃描,我們需要有當前已生成的gnode列表;在將此gnode添加到生成的gnode列表前,我們需要對其連接的node調用此算法得到它的gedge的鏈表。

雞生蛋?蛋生雞?

寡人陷入了沉思。

寡人C語言學識尚可,這種情況下,如果使用C(C++)語言,寡人定采用指針鏈表實現gnode列表:

在得到當前node的id和label后,生成對應的gnode,其gedge鏈表置為null。將此gnode列表的下一元素指向此gnode,即添加到轉化完成的gnode鏈表。實則,我們此時還未得到此gnode的gedge鏈表,但我們有了id和label——探測一個node可曾被掃描的完備條件。在我們得到gedges后,更新此gnode的屬性,gnode列表中的它自然也就更新了。

java中如何實現指針數組?

寡人開始搜goo羅gle天下百姓的建議

以上都是廢話


孤看了這個博客http://www.ticmy.com/?p=174,豁然開朗:孤不懂對象。

孤編了個小程序試之,愛卿們且看:

package a2;

import java.util.LinkedList;

public class Test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        LinkedList<Shit> c=new LinkedList<Shit>();
        Shit d=new Shit();
        d.a=0;d.b="oh,shit!";
        c.add(d);
        d.a=1;d.b="omg!";
        for(Shit a:c){
            System.out.println(a.a+" "+a.b);
        }
    }

}

class Shit{
    public int a;
    public String b;
}

輸出結果是: 1 omg

只有new才會分配一個新的地址空間,List的add,只是添加了一個對被add對象的引用。修改這個對象,List中的它當然會改變,因為“它”就是“它”啊……

孤被自己蠢哭了。

孤要搞懂對象。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM