您可以使用Set
来回快速查找
int getRandomIndex(Random rand, int size, Integer... i) {
return getRandomIndex(rand, size, new HashSet<Integer>(Arrays.asList(i)));
}
int getRandomIndex(Random rand, int size, Set<Integer> x) {
int result;
do {
result = (int) (rand.nextDouble() * size);
} while (x.contains(result));
return result;
}
如果所有索引的集合都是预定义的,那么您Set
x
final static
每次调用该方法时都可以使用和备用构建它。
EIDT
好吧,如果性能是一个问题,那么我会说您的第一种方法while(r == i || r == j || r == k)
既不坏也不丑陋,只需对您的方法进行三个重载并调用您需要的适当的方法,该调用看起来与使用 val-len-大批。
你不能比(r == i || r == j || r == k)
int getRandomIndex(Random rand, int size, int i)
int getRandomIndex(Random rand, int size, int i, int j)
int getRandomIndex(Random rand, int size, int i, int j, int k)