2015-04-21 61 views
1

當我的數據打印出來時,按照我在代碼中指示的ORDER BY的順序排列。數據不會按順序顯示

下面是我的代碼的幾個剪輯,可能有所幫助。注意一些錯誤,因爲我必須在發佈之前刪除一些行。

String dataFinder = "SELECT DISTINCT dG2 FROM DAE ORDER BY dG2"; 

HashMap<String, StringWriter> fSW= new HashMap<String, StringWriter>();  

HashMap<String, HashMap<String, String>> DGGSW = new HashMap<String, HashMap<String, String>>(); 

      this.setSQL(dataFinder); 
      ResultSet rs = this.retrieveAllData(handler, tracker); 
      while (rs.next()) 
      { 
       if (rs.getString("dG2") != null) 
       { 
        fSW.put(rs.getString("dG2").trim().toUpperCase(), new StringWriter()); 
        DGGSW.put(rs.getString("dG2").trim().toUpperCase(), new HashMap<String, String>()); 
       } 
      } 

      StringWriter stringWriter = new StringWriter(); 

      while (rs.next()) 
      { 
       String dataList = ""; 

       if (rs.getString("diagM") != null) 
        dataList = rs.getString("diagM"); 
      } 

      String resultString = stringWriter.toString(); 

      for (String diaG : DDGSW.keySet()) 
       resultString += diaG + "," + DDGSW.get(gateNo).toString(); 

      this.WriteToFile(resultString); 
     } 

    } 

} 
+0

Hashmap不是有序集合。訂購將不會保持一旦你將值hashmap – Nimesh

回答

2

您選擇的數據結構不正確。

如果您想要插入的順序,您應該使用LinkedHashMap代替HashMap(其中插入的順序不能保證保留)。

由於您是按順序獲取記錄並將其插入到HashMap中,因爲記錄是通過散列函數傳遞的,所以記錄按隨機順序插入。

+1

感謝老兄!終極救星! – krankzzz

+0

很高興幫助:) –

1

您正在使用HashMap它說以下內容:

此類不作任何保證,而地圖的順序;特別是,它不能保證訂單會隨着時間的推移保持不變。

使用LinkedHashMap:Map接口的

的哈希表和鏈接列表實現,具有可預知的迭代順序。這個實現與HashMap的不同之處在於它保持了一個雙向鏈表,它貫穿其所有條目。這個鏈表定義了迭代排序,這通常是鍵被插入映射的順序(插入順序)。請注意,如果將鍵重新插入到地圖中,則插入順序不受影響。 (如果m.containsKey(k)在調用之前立即返回true,則調用m.put(k,v)時,將密鑰k重新插入到映射m中。)