2016-06-01 57 views
0

刪除重複的對象在基於棋盤遊戲DFS(深度優先搜索)算法,我設計用於分數的解決方案比較對象諸如排序Object.propertyOne一個對象列表,並通過在Object.propertyTwo同時

class Solution { 
    double score; 
    int currentPosition; 
    byte[] board; 
} 

而我們可以通過Comparator<Solution>得分來快速排序List<Solution>

但給它一個進一步的嘗試,如果我們想控制深度搜索的內存使用情況,我們必須做重複刪除。

發生同一板和同一currentPosition等複製時,只留下得分最高的一個,移除其他。

那麼,Java中是否存在一些很好的算法,用於同時對對象的不同屬性進行重複刪除和評分排序?

回答

0

也許你可以重寫equals和hashCode,並將它們放在Set中,這樣就不會添加重複項。

一個很好的例子,可以發現:http://g-liu.com/blog/2014/10/implementing-custom-duplicate-detection-with-linkedhashset/

+0

但我們能做些什麼,如果一個'Solution'具有相同的hashCode,但更高的分數,添加到集合?當棋盤變大時,國際象棋會有更多的類型,準確的哈希比較也是一些痛苦。 – rufushuang

+0

取決於你的應用程序邏輯,你想這被認爲是重複的嗎? –

+0

具有相同電路板和currentPosition的解決方案是重複的。但是,如果重複,則應該添加更高分數的解決方案,並取代較低分數的解決方案。 – rufushuang