2015-04-21 57 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中。)