gpt4 book ai didi

java - !list.isEmpty() 和 list.size()>0 是否相等?

转载 作者:搜寻专家 更新时间:2023-11-01 04:07:22 25 4
gpt4 key购买 nike

我看过如下代码:

     if (!substanceList.isEmpty() && (substanceList.size() > 0))
{
substanceText = createAmountText(substanceList);
}

以下是有效的重构吗?

     if (!substanceList.isEmpty())
{
substanceText = createAmountText(substanceList);
}

请解释一下上面的代码,第二个版本是否会出错?

最佳答案

如有疑问,请阅读 Javadoc:

Collection.isEmpty() :

Returns true if this collection contains no elements.

Collection.size() :

Returns the number of elements in this collection

因此,假设集合已正确实现:

collection.isEmpty() <=> collection.size() == 0

或者,反过来:

!collection.isEmpty() <=> collection.size() != 0

由于元素的个数只能是正数,这意味着:

!collection.isEmpty() <=> collection.size() > 0

所以是的,这两种形式是等价的。

警告:实际上,只有当您的集合没有同时从另一个线程修改时,它们才等效。

这个:

!substanceList.isEmpty() && (substanceList.size() > 0)

按照我上面给出的逻辑,等同于:

!substanceList.isEmpty() && !substanceList.isEmpty()

你只能将其简化为

!substanceList.isEmpty()

如果你能保证它的值在 substanceList.isEmpty() 的评估之间不会改变。

实际上,您不太可能需要关心这些情况之间的区别,至少在代码的这一点上是这样。您可能需要关心在另一个线程中更改的列表,但是,如果它在执行 createAmountText 之前(或同时)变为空。但这不是此次重构引入的内容。

TL;DR:使用 if (!substanceList.isEmpty()) { 实际上做同样的事情,而且更易读。

关于java - !list.isEmpty() 和 list.size()>0 是否相等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48841722/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com