之前业务中曾经遇到过从m个元素中选取 n 个的需求,当时只是跑循环根据长度进行随机选取,然后放入 Set 中去重,一直到收集到足够的个数. 这样做的缺点很明显,当剩下的元素个数越少的时候,选取的元素越容易重复,并且,使用 Set 去重,值相同的字符串会被认为是相同的元素,即使给入的数组确实有重复的数据. 直到最近看到了 Fisher-Yates 洗牌算法,从中收到启发,写了一个从 m 个元素中选取 n 个的方法,该方法性能上有了很大提升,并且可以保证取到的元素的索引绝对不会重复.如果数组中的确有…