假設我有理由要求通過多個值類型快速查找類實例,爲了解釋這一點,我將以遊戲服務器爲例。Java - 高效的集合管理
可以說服務器處理帶有靜態識別號碼的用戶。此號碼用於與特定玩家進行交流和互動(即:私人聊天,交易請求,戰鬥,公會邀請等)。
這就需要通過自己的身份證號碼,根據我目前的經驗,要做到這一點的最好辦法看玩家了常見的用法是,像這樣:(請糾正我,如果我錯了。)
HashMap<Integer, Player>
然而,在處理網絡問題時,有很多時候我還需要讓播放器與網絡會話相關聯,或者像有些人可能更熟悉的「套接字」那樣。這會看起來像這樣:
HashMap<Connection, Player>
那麼我想就是弄清楚,我應該走這條路:
HashMap<Integer, Player> playersById;
HashMap<Connection, Player> playersByConnection;
或者我應該做的事情多一點「一起搗爛」像這樣:
HashMap<Object[], Player> playersOnline;
和具有Object[0]
爲整數,並且Object[1]
作爲Connection,然後使用查找過程中所需的一個。
或者這兩種方法都是有效的和不正確的,有沒有更好/更快的方式來查看它們的整數或連接而不重複集合?
任何洞察力將非常感激。
編輯:此外,有沒有什麼反對HashSet<>
和HashMap<>
包含相同的類引用?我注意到HashSet<>
在迭代上比HashMap<>
效率高得多,並且一直保持用於查找的Map和用於迭代的Set,這是不好的做法嗎?
@aliteralmind - 感謝您的鏈接,儘管已經閱讀了所有內容! – Hobbyist 2015-02-12 04:23:44
您是否量化了迭代HashSet和HashMap之間的性能差異?你在HashSet中保留了什麼? 「玩家」對象? – 2015-02-12 04:25:24
@aliteralmind標記爲重複?真?這個問題是關於在地圖上是否有多域密鑰是一個好主意:關於選擇實現只有一小部分附錄。 '重複'是關於一個簡單的方法來選擇使用哪個集合:只與這個問題隱約相關。 – sprinter 2015-02-12 05:02:17