我已經成功實現了一個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 –