Java 添加到设置时条件的良好实践?

Java 添加到设置时条件的良好实践?,java,while-loop,set,Java,While Loop,Set,我正在尝试向一个集合中添加一个随机数。如果已在集合中,则循环应继续并重试 这是更好的实践 do { nextChosenInt = rand.nextInt(48) + 1; addFailed = !chosenInts.add(nextChosenInt); } while (addFailed); 或 我将在这里投票支持第二种选择,但有一点变化 您正在利用.add方法返回一个布尔值这一事实,这是一个有益的选择,因为您不需要有冗余的标志变量,从代码的上下文来看,它除了终止循环之外没

我正在尝试向一个集合中添加一个随机数。如果已在集合中,则循环应继续并重试

这是更好的实践

do {
  nextChosenInt = rand.nextInt(48) + 1;
  addFailed = !chosenInts.add(nextChosenInt);
}
while (addFailed);


我将在这里投票支持第二种选择,但有一点变化

您正在利用
.add
方法返回一个布尔值这一事实,这是一个有益的选择,因为您不需要有冗余的标志变量,从代码的上下文来看,它除了终止循环之外没有其他用途

但就我个人而言,我会选择摘录:

!chosenInts.add(nextChosenInt)

将其转换为更具描述性和可读性的方法。通过这样做,您允许任何人在事先不了解集合API的情况下理解此条件。

根据“如果此集合已包含元素,则调用将保持集合不变并返回false。”无论何时添加到集合,如果集合已包含元素,则将保持不变。因此,它在性能上并没有真正的区别。

因为集合不能保存重复项。只需执行此操作,直到
set
具有所需的元素数。但你也可以这样做

        Random rand = new Random();
        int next = 50;
        for (int i = 0; i < 10; i++) {
           next = rand.nextInt(48) + next+1;
           set.add(next);  
        }

对不起,我可能应该修改我的帖子,因为我并没有用这种方式实现它。我只是关心这个条件,以及在这个条件下加入布景是否是一个好的做法。NEXTCHOSENIT在循环之前声明,并在第一次迭代中初始化。在性能方面,我看不出有多大区别。您也可以在(!chosenInts.add(rand.nextInt(48)+1))。但是,如果没有更多的上下文,我不确定是什么阻止了地图被所有可能的随机数填满,并以无限循环结束。我们都知道集合不能保存重复项,OP也是如此,我想你误解了这个问题。OP希望生成并添加一个集合中不存在的随机数。确定。我以为OP只是想生成N个唯一的数字。
        Random rand = new Random();
        int next = 50;
        for (int i = 0; i < 10; i++) {
           next = rand.nextInt(48) + next+1;
           set.add(next);  
        }
        int size = set.size();
        while (set.size() == size) {
           set.add(rand.nextInt(48));
        }