我已经成功实现了一个java程序,该程序使用两种常见数据结构:Tree
和Stack
以及一个接口,该接口允许用户输入树节点标识并获得有关它的信息给其父母。你可以看一下这个方案在这里的最新版本at my GitHub src for this program比较java中的结构化数据
背景
这个特设程序我写的是在由文件数据进行比较,来研究在数百生物的基因流的演化作者:FeatureIDs = String
基元(进一步下来,它们在第一列中列为"ATM-0000011"
,"ATM-0000012"
等),并且由与它们在树中的特定节点上的存在或缺失相关联的分数组成,并且这些分数是double
原语。
下面是数据文件的样子:
"FeatureID","112","115","120","119","124",...//this line has all tree node IDs
"ATM-0000011",2.213e-03,1.249e-03,7.8e-04,9.32e-04,1.472e-03,... //scores on these lines
"ATM-0000012",2.213e-03,1.249e-03,7.8e-04,9.32e-04,1.472e-03,...//correspond to node ID
"ATM-0000013",0.94,1.249e-03,7.8e-04,9.32e-04,1.472e-03,...//order in the first line
... //~30000 lines later
"ATM-0036186",0.94,0.96,0.97,0.95,0.95,...
的问题
此之前,它是不够好,才使从数据文件双打的二维数组(数组排除文件和FeatureID中的第一行,因为它们是Strings),然后使用2D数组来制作double
堆栈。根据用户输入和Tree
确定父组和子组节点的堆栈。
然后,父级和子级堆栈中的数据将同时弹出(从而确保相同的FeatureID正在进行比较,而实际上不必将这些数据包含在DS中),并根据是否进行比较他们遇到了一个确定的条件(即如果两个值都大于等于0.75)。如果他们做了,柜台会增加。一旦比较结束(堆栈为空),程序将返回计数。
现在我想要做的,而不是仅仅计数,是做一个功能标识符符合比较标准的列表。因此,我不希望返回符合条件的节点A和节点B之间有4100个FeatureID的计数器,而是希望获得满足节点A和节点B之间比较条件的全部4100个功能ID Strings
的列表。我要稍后将该列表保存为文件,但这不在意。这意味着我可能不得不放弃以前工作得很好的double
二维阵列/ double
堆栈方案。
问题
知道问题是什么,是有一个聪明的修复这个问题,我可以做出改变,以输入的数据文件,或者某个地方在我的代码(tlacMain.java),无将更多的数据添加到流程中?我只需要想法。
如果您计算featureIDs,为什么不将它们添加到列表结构(如ArrayList)? –
(这也适用于@felixbr)该方法的问题在于,用于比较的方法需要父类和子类Stack,它不包含FeatureID信息。在Github的代码中查看实现https://github.com/asobin/sobin/blob/master/PhyloTLaC/src/tlacMain.java#L253 –