【问题标题】:Extract string element from single-item HashSet [duplicate]从单项HashSet中提取字符串元素[重复]
【发布时间】:2018-06-09 09:27:20
【问题描述】:

我有一组字符串:HashSet<String> idSet。如果集合中只有一个元素,我想提取字符串。这就是我正在做的事情:

if(idSet.size() == 1) {
    String id = (String) idSet.toArray()[0];
}

如果只有一个元素,这是获取字符串的正确方法吗?我想检查是否有更优雅的方式。

【问题讨论】:

  • 不,这太糟糕了。使用idSet.iterator().next()
  • @BoristheSpider。你应该写一个答案来解释原因。

标签: java


【解决方案1】:

没有理由将整个集合转换为数组只是为了从中获取一个元素。相反,我会使用它的迭代器:

if (idSet.size() == 1) {
    String id = idSet.iterator().next();
}

【讨论】:

  • 这更加优雅(所以 +1),但现在您正在创建一个迭代器对象。这真的比制作单元素数组更浪费吗?
  • @MadPhysicist 更明确的演员是这种方法的问题。如果集合是 Set<Integer> 怎么办 - 你仍然可以写 String id = (String) idSet.toArray()[0];,只是它会在运行时失败。
  • @AndyTurner。在这种情况下,使用idSet.toArray(buf)[0] 可能更有效,其中buf 是为此目的预先分配的1 元素String[]
  • @MadPhysicist 以及它对线程安全的影响如何?
  • @AndyTurner。他们呢?每个线程有一个单独的数组或同步提取以使其成为原子。也许OP根本没有使用多线程?你必须小心线程的事实是给定的。仅仅因为你可以是个白痴并破坏某些东西,并不意味着你应该这样做。
猜你喜欢
  • 2011-07-04
  • 2019-03-04
  • 2012-12-01
  • 1970-01-01
  • 2013-12-10
  • 2020-11-04
  • 2011-05-27
  • 1970-01-01
相关资源
最近更新 更多