不尋找任何代碼的幫助,只是一些建議。像Collections.rotate的地圖
我正在設計一個調度程序,它爲所有團隊提供文本文件輸入並安排每週遊戲。我有這個工作,現在我正在擴大它,以保持結果。目前我將所有隊伍列入清單。並使用Collections.rotate旋轉列表以隨機化燈具。
我正在考慮使用Map來保存團隊和勝數,但旋轉對於地圖來說似乎不起作用。有沒有類似的功能,我錯過了,或者我忽略了什麼?
不尋找任何代碼的幫助,只是一些建議。像Collections.rotate的地圖
我正在設計一個調度程序,它爲所有團隊提供文本文件輸入並安排每週遊戲。我有這個工作,現在我正在擴大它,以保持結果。目前我將所有隊伍列入清單。並使用Collections.rotate旋轉列表以隨機化燈具。
我正在考慮使用Map來保存團隊和勝數,但旋轉對於地圖來說似乎不起作用。有沒有類似的功能,我錯過了,或者我忽略了什麼?
你不想旋轉地圖本身,但它聽起來像你想要做的是旋轉地圖的鍵的視圖。
因此,在僞代碼,你可以不喜歡
//make a copy of the keys of the map
List keys = new ArrayList(yourmap.keys())
Collections.rotate(keys)
//iterate over the keys of the map in the new rotated order
for key in keys:
Object value = yourmap.get(key)
// do something with this value
主要有3個,非專業的Map
接口在JDK的實現:
HashMap
未下令 - 這是不會幫你TreeMap
這是基於有序一些比較 - 恐怕不是容易適應你的使用情況LinkedHashMap
這由插入命令或訪問順序排序對於您的情況,您可以使用LinkedHashMap
使用訪問訂單(您創建一個與a special construtor with the parameter accessOrder
set to true
),並且每次訪問其中一個項目時,它將自動重新排序到地圖的尾部。完整的迭代週期將保持訂單不變。
「...每次訪問其中一個項目時,它將自動重新排序到地圖尾部。」訪問不會移動任何東西,除非您使用特殊構造函數實例化它,並且默認情況下,所有其他構造函數都會生成地圖插入順序。 – Brian
@Brian我特別提到*'LinkedHashMap'使用**訪問順序***,它是用您鏈接的構造函數創建的。 – assylias
我的意思是,如何創建它並不明顯,就這些。由於某些原因,鏈接不能使用'[]()',所以這裏是:http://docs.oracle.com/javase/6/docs/api/java/util/LinkedHashMap.html#LinkedHashMap (int,%20float,%20boolean) – Brian
旋轉可能與LinkedHashMap的工作,這是怎樣的一個元素旋轉地圖
Iterator<Entry> i = m.entrySet().iterator();
Entry e = i.next();
i.remove();
m.put(e.getKey(), e.getValue());
如何添加場勝利,併爲你的團隊課程安排者和獲得者?這樣,您仍然可以將它保存在列表中,並像以前一樣使用Collections.rotate。查找不是O(1)像地圖,但有一個不應該成爲問題的團隊列表,幾個元素。 – arynaq