1. 程式人生 > >關於使用map存放資料亂序”問題“

關於使用map存放資料亂序”問題“

今天做專案中遇到了一個比較低階的錯誤,如果沒注意將會變的更麻煩。。。

其實吧,也不難,要求就是將list中的值轉為map後,再順序輸出map中的值,list的順序怎樣,加入到map的順序也應怎樣,不能亂序!

一開始做之前沒注意那麼多,習慣性使用

1 Map<String,Object> jsonMap = new HashMap<>();

這樣做之後的結果可想而知,雖然說查詢資料快,但資料肯定是亂序的,畢竟它是根據hashcode碼來排序,

之後使用TreeMap,但依然沒有得到想要的結果,而HashTable就更不用說了。

可能是因為當時事多比較急吧,沒考慮那麼多,最後查看了下api之後,才發現可以使用LinkedHashMap才能達到自己想要的效果;

最後來講下HashMap、TreeMap、LinkedHashMap和HashTable四者的區別吧:

1、HashMap中的key的值根據hashcode來排序,無法得到實際中想要的順序,常用來做統計;

2、LinkedHashMap,它內部有一個連結串列,可以保持key插入的順序。迭代的時候,也是按照插入的順序進行迭代,而且迭代的速度比HashMap更快;

3、TreeMap的順序是key的自然順序(如整數從小到大),也可以指定比較函式,但不能保持插入時的順序

4、HashTable與HashMap類似,它繼承自Dictionary類,不同的是:它不允許記錄的鍵或者值為空;它支援執行緒的同步、即任一時刻只有一個執行緒能寫Hashtable,因此也導致了Hashtable在寫入時會比較慢。