0
根據該問題插入順序:How to preserve insertion order in HashMap?同時保留的HashMap&教程樣品
HashMap中不保證作爲對地圖的順序;特別是, 它並不保證訂單會隨着時間的推移保持不變。
但後來我有一個關於一個Oracle教程
public void updateCoffeeSales(HashMap<String, Integer> salesForWeek)
throws SQLException {
...
try {
...
for (Map.Entry<String, Integer> e : salesForWeek.entrySet()) {
updateSales.setInt(1, e.getValue().intValue());
updateSales.setString(2, e.getKey());
updateSales.executeUpdate();
updateTotal.setInt(1, e.getValue().intValue());
updateTotal.setString(2, e.getKey());
updateTotal.executeUpdate();
con.commit();
}
} catch (SQLException e) {
...
} finally {
...
}
這是從這裏的問題:http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html
他們怎麼知道,updateSales &值updateTotal不會混淆?
看,他們迭代拋出HashMap,並且結果可以以任意順序,就像你說的。但是如果迭代塊中的第一對將用於updateTotal呢?然後,第一對值將用於updateSales,這將是完全錯誤的... – andy007 2014-09-21 09:03:47
@安迪你是什麼意思?演示中的每一對都用於更新銷售額*和*用於更新總額。該表的設置方式使'SALES'列包含上週的值,'TOTAL'包含運行總數。 – dasblinkenlight 2014-09-21 09:04:20
@Andy在'for'循環的** body **中,元素'Map.Entry e'不會改變。 'updateSales'和'updateTotal'在每次迭代中都會使用相同的元素'e'。這個文檔僅僅意味着你從'entrySet()'得到的元素的順序是任意的並且不能保證,但是一旦你得到它們並且開始對它們進行迭代,那麼在迭代過程中**不會改變**。 – ADTC 2014-09-21 09:29:57