今天寡人遇到一个问题,扫描非关系数据库中的图(由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中的它当然会改变,因为“它”就是“它”啊……

孤被自己蠢哭了。

孤要搞懂对象。

关于java中指针的概念的更多相关文章

  1. Java中“指针”的解释以及对“引用”的理解

    Java中"指针"的解释以及对"引用"的理解 初学Java面对对象编程,对于一些概念还真的有点难以理解,主要是因为不由自主的联系到以前学过的C语言知识,时不时的 ...

  2. java 中包的概念,常量,静态与继承

    一.包的概念:创建,使用. 1.新建包: 最上面一行,之前不能再有其它代码了. package 包名; 注意:包名一般都有命名的规范.例如:com.itnba.maya.zy(从大到小). 2.使用包 ...

  3. java中接口的概念及使用(补充final修饰符的使用)

    接口 初期理解,可以是一个特殊的抽象类 当抽象类中的方法都是抽象的,那么该类可以通过接口的形式来表示 class 用于定义类 interface 用于定义接口 接口定义时,格式特点: 1.接口中常见的 ...

  4. Java中的锁概念

    掌握Java中锁是Java多线程编程中绕不开的知识,只有知道理解Java各种锁才能在编码过程中灵活运用,写出更高效的多线程程序.而理解掌握锁的第一步,可从宏观上对比理解一下各种锁概念. 公平锁/非公平 ...

  5. java 中接口的概念

    接口接口在java中是一个抽象的类型,是抽象方法的集合,接口通常使用interface来声明,一个类通过继承接口的方式从而继承接口的抽象方法.接口并不是类,编写接口的方式和类的很相似,但是他们属于不同 ...

  6. java中引用的概念

    强引用(StrongReference) 强引用就是指在程序代码之中普遍存在的,比如下面这段代码中的object和str都是强引用: 1 2 Object object = new Object(); ...

  7. java 中的包概念

    Java 中的包package, 就是电脑中的文件夹.我们平时在工作中,文件太多时,都会新建文件夹进行分类管理,java 中的包也是类似的道理,当我们的类太多时,也需要进行分类管理,这时我们就会把类文 ...

  8. java中继承的概念

    继承是类的三大特性之一,是java中实现代码重用的重要手段之一.       java中只支持单继承,即每个类只能有一个父类.       继承表达的是is a的关系,或者说一种特殊和一般的关系.   ...

  9. Java中的引用概念

    Java对对象和基本的数据类型的处理是不一样的.和C语言一样,当把Java的基本数据类型(如int,char,double等)作为入口参数传给函数体的时候,传入的参数在函数体内部变成了局部变量,这个局 ...

随机推荐

  1. JS控制div跳转到指定的位置的几种解决方案总结

    原文:http://www.jb51.net/article/96574.htm 这篇文章主要介绍了JS控制div跳转到指定的位置的几种解决方案总结,小编觉得挺不错的,现在分享给大家,也给大家做个参考 ...

  2. 随手练——HDU 1078 FatMouse and Cheese(记忆化搜索)

    http://acm.hdu.edu.cn/showproblem.php?pid=1078 题意: 一张n*n的格子表格,每个格子里有个数,每次能够水平或竖直走k个格子,允许上下左右走,每次走的格子 ...

  3. OpenCV——重映射、仿射变换

    #include <opencv2/opencv.hpp> #include <iostream> #include <math.h> using namespac ...

  4. 虚拟机-Debian服务器配置

    目的:用虚拟机中的Debian 8 操作系统作为web服务器 一.安装操作系统 首先要在vmware中安装一个debian操作系统,由于要让在局域网中的其他计算机能访问到此虚拟操作系统,因此在vmwa ...

  5. DM9161 和 STM32F107 和 FreeRTOS 和 LWIP

    1.首先移植 FreeRTOS到  107上 可以正常运行. 可以到群下载移植好的,文件名称:STM32F107VC+FreeRTOS V8.2.3+kfifo(巧夺天工)! 2.第二步 :ST 官方 ...

  6. [Lydsy1805月赛]quailty 算法 BZOJ5362

    分析: 题目中描述了一个二分图,让我们求最小权最大匹配,实际上其实是求n个点,在n*(n-1)/2中选n条边的权值和最小,形成一个每个点都有出边的体系,也就是基环树,(证明:因为我们需要二分图最大匹配 ...

  7. 【LeetCode148】Sort List★★bug

    1.题目描述: 2.解题思路: 本题是要堆一个链表进行排序,并且要求时间复杂度为 O(n log n).很明显,要用到分治的思想,用二分法进行归并排序:找到链表的middle节点,然后递归对前半部分和 ...

  8. C语言中猴子吃桃问题

    猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个.第二天早上又将第一天剩下的桃子吃掉一半,有多吃了一个.以后每天早上都吃了前一天剩下的一半零一个.到第 10 天早上想再吃时 ...

  9. WPF中ListBox /ListView如何改变选中条背景颜色

    适用ListBox /ListView WPF中LISTVIEW如何改变选中条背景颜色 https://www.cnblogs.com/sjqq/p/7828119.html

  10. WPF XML序列化保存数据 支持Datagrid 显示/编辑/添加/删除数据

    XML序列化保存数据 using System; using System.Collections.Generic; using System.Linq; using System.Text; usi ...