当我的数据打印出来时,它的顺序是我在我的代码中指示的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 :(得分:2)
您的数据结构选择不正确。
如果您想要插入的顺序,则应使用LinkedHashMap代替HashMap(无法保证插入的顺序)。
由于您在订单中提取记录并将其插入HashMap
,因此记录以随机顺序插入,因为它是通过哈希函数传递的。
答案 1 :(得分:1)
您使用的是HashMap,其中包含以下内容:
此课程不保证地图的顺序;特别是,它不保证订单会随着时间的推移保持不变。
Map接口的哈希表和链表实现,具有可预测的迭代顺序。此实现与HashMap的不同之处在于它维护了一个贯穿其所有条目的双向链表。此链接列表定义迭代排序,通常是键插入映射的顺序(插入顺序)。请注意,如果将键重新插入地图,则插入顺序不会受到影响。 (如果m.containsKey(k)在调用之前立即返回true,则调用m.put(k,v)时,将密钥k重新插入到映射m中。)