2010-11-03 78 views
1

我有String的ArrayList。我需要通過「散列號」對它進行隨機化。 例子:如何隨機散列(Java)?

的ArrayList: 「字」, 「簡單」, 「另一種」, 「演示」 哈希:1234567

由於隨機我想收到的結果說: 「簡單」, 「字」 ,「演示」,「另一種」

與其他哈希:542345我想收到說:「字」,「另一種」,「演示」,「簡單」

但要求是,當我總是按此散列進行排序隨機順序始終與該散列相同。

有什麼建議嗎? Adviscs?

+0

爲什麼一致散列標記爲標記?這是DHT路由的一個區別。 – zengr 2010-11-03 02:03:36

回答

5

你可以shuffle列表使用隨散列初始化的隨機對象。

Collections.shuffle(myList, new Random(12345)); 

當使用相同的散列來播放隨機對象時,混排順序應該變成相同。

+0

謝謝;我找不到任何文檔確認相同隨機對象的隨機播放將返回相同的集合。你能指點我一個嗎?謝謝! – alexeypro 2010-11-03 05:55:50

+1

@alexeypro:可以從涉及的兩個方法的文檔中推斷出[Collections.shuffle](http://download.oracle.com/javase/1.4.2/docs/api/java/util/Collections.html# shuffle%28java.util.List,%20java.util.Random%29)和[Random(long)](http://download.oracle.com/javase/1.4.2/docs/api/java/util/ Random.html#Random%28long%29)構造函數。將相同的種子傳遞給Random構造函數將確保每次調用shuffle時RNG處於相同的初始狀態,從而導致列表的相同排序。 – 2010-11-03 11:15:52

1

使用「散列」(無論是手段)作爲種子隨機數發生器?

0

你可以這樣做:

value1 = "hello" --> value1.hashCode() = 99162322 
value2 = "hello" --> value2.hashCode() = 99162322 

所以,如果你「真的」需要使用散列,那麼你可以通過ArrayList的迭代,總結所有產生的哈希值,並將其保存。

現在,當您需要驗證哈希是否相同時,再次遍歷新的數組列表,生成哈希碼(),對其進行總結並檢查。

但它是一個矯枉過正。您可以按照Bill的建議簡單地使用shuffle()。