【问题标题】:Simplify unique String check in a Set简化集合中的唯一字符串检查
【发布时间】:2020-05-26 16:51:40
【问题描述】:

我想生成唯一的字符串 ID,直到它是唯一的。

我的做法是:

private Set<String> uniqueIdSet = new HashSet<>();
...

 boolean contains = uniqueIdSet.contains(getRandomId());
    while (contains){
      var randomId = getRandomId();
      contains = uniqueIdSet.contains(randomId);
      if (!contains){
        uniqueIdSet.add(randomId);
      }
    }

我的问题:有没有更好的方法来实现这个?

【问题讨论】:

  • 这可能更适合代码审查...
  • Set的主要目的是保证没有重复的元素。 adding 元素已经检查过了。
  • @f1sh 那么您将如何使用默认的 Set 逻辑来实现它?试试看?
  • @DerBenniAusA String randomId; do { randomId = getRandomId(); } while (! uniqueIdSet.add(randomId)); --- 如果值已经在集合中,则add() 方法返回false,即无法(再次)添加该值,所以继续生成一个值直到它返回true,即当它返回false

标签: java set unique contains


【解决方案1】:

Set 的主要目的是保证没有重复的元素。 adding 元素已经检查过了。

使用add中的the return value查看id是否已经在Set中:

String randomId = getRandomId();
while (!uniqueIdSet.add(randomId)) {
  randomId = getRandomId();
}

编辑:看看上面 Andreas 的评论,这更好。

【讨论】:

    猜你喜欢
    • 2017-12-04
    • 1970-01-01
    • 1970-01-01
    • 2015-09-09
    • 1970-01-01
    • 2019-05-19
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多