2016-05-23 19 views
0

如何把紀錄:如何把記錄放在linkedhashmap java的map中或者如何創建數據結構?

Map<String, LinkedHashMap<String, String>> fileRecords = new LinkedHashMap<String, LinkedHashMap<String,String>>(); 

我有相同的格式兩個文件,我要創建爲他們兩個的數據結構,然後比較數據結構來確定每個CAID-差異找到塊並比較數據。

enter image description here

所以相應地我試圖逐行讀取文件中的行。我應該試着把這些記錄放在地圖或arraylist中(我必須遵循插入順序)。

把ID作爲唯一,對於唯一的ID,我想存儲相應的塊和數據。

+0

使用sql - 它會更好 –

+0

Sql不能使用,bcoz我需要從文件中讀取數據,甚至是大數據文件,數據大約有70K條記錄。 – rockersdeal

+0

看起來你並沒有真正的鑰匙。三列似乎是關鍵。如果你沒有提供一個散列表的唯一鍵,它當然會覆蓋以前的值。不會添加額外的自動生成的ID(即autoincremental)列幫助? –

回答

0

使用Map或List或Set的決定取決於正在讀取的數據的目的。

  • 如果你需要索引的數據(例如,通過ID),然後用地圖
  • 否則,如果您想通過數據,以便重複,我會建議列出或設置集合。如果你的數據集不支持重複,我建議你設置一個或者一個列表,如果它有重複的話。

關於代碼使用地圖,所述一段代碼下面組塊和數據每ID:

public void read() { 
    Map<String, LinkedHashMap<String, String>> fileRecords = new LinkedHashMap<>(); 
    String id, block, data; 

    //while(dataInFile()) { 
     // I assume data is read row by row into vars id, block and data 

     // get the block map for the just read ID 
     LinkedHashMap<String, String> blockRecords = fileRecords.get(id); 

     // first Block for the ID 
     if (blockRecords == null) { 
      blockRecords = new LinkedHashMap<>(); 
      fileRecords.put(id, blockRecords); 
     } 

     // read data and block 
     blockRecords.put(block, data); 
    } 

此代碼還允許您組塊和數據,如果ID不文件中排序。 如果ID始終是一個整數,我建議您使用Integer而不是String。它在匹配期間節省內存和CPU。另外,如果你的文件中的數據不只是這三個字段,我建議你使用對象代替。然後,您需要更加關注數據的用法來設計對象模型。

+0

是的,你是對的,通過名單會更好。我可以創建源=地圖>其中 D2 = ArryayList 和目標=地圖>其中 D2 = ArrayList的然後對比 – rockersdeal

+0

我的意思是讀入列表的記錄: ' class Record { private String id; 私人字符串塊; 私人字符串數據; // ... } ' 然後使用Comparator,Comparable或Iterator對列表進行排序或按您想要的順序遍歷它。 – Esteban

相關問題