2010-11-03 49 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()。