- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试使用 Java7 的 WeakHashMap,我发现它的 isEmpty() 方法给出了错误的结果。
import java.util.Map;
import java.util.WeakHashMap;
public class Test
{
public static void main(final String[] args)
{
final Map<String, Boolean> map = new WeakHashMap<>();
String b = new String("B");
map.put(b, true);
b = null;
System.gc();
System.out.println(map.isEmpty());
System.out.println(map.keySet().isEmpty());
System.out.println(map);
}
}
实际结果:
错误
正确
{}
也就是说,
map.isEmpty() 和 map.keySet().isEmpty() 不一致。有人可以帮我理解吗?非常感谢。
最佳答案
你应该阅读 WeakHashMap
的 javadoc :
The behavior of the
WeakHashMap
class depends in part upon the actions of the garbage collector, so several familiar (though not required)Map
invariants do not hold for this class. Because the garbage collector may discard keys at any time, aWeakHashMap
may behave as though an unknown thread is silently removing entries. In particular, even if you synchronize on aWeakHashMap
instance and invoke none of its mutator methods, it is possible for thesize
method to return smaller values over time, for theisEmpty
method to returnfalse
and thentrue
, for thecontainsKey
method to returntrue
and laterfalse
for a given key, for theget
method to return a value for a given key but later returnnull
, for theput
method to returnnull
and theremove
method to returnfalse
for a key that previously appeared to be in the map, and for successive examinations of the key set, the value collection, and the entry set to yield successively smaller numbers of elements.
总而言之,您看到的效果是完全有效的。
关于Java7 WeakHashMap isEmpty() 似乎不对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55405864/
var foo = { bar: ''}; 我经常看到这样的代码: if(foo.bar.isEmpty()){ //this line most of the time breaks
我希望能够编写一个条件,使我可以搜索所有具有特定DevelopmentOfInterest(hasMany)或根本没有任何线索的线索。 我的域模型如下所示: Lead { Set develop
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 9 年前。 Improve
如果您已经知道集合不为空,什么对性能更好。使用 Apache Commons 库中的 !collection.isEmpty() 或 CollectionUtils.isNotEmpty(collec
TextUtils.isEmpty(string)和string.isEmpty有什么区别? 两者都执行相同的操作。 使用 TextUtils.isEmpty(string) 有好处吗? 最佳答案 是
我知道这很奇怪,但这就是我所拥有的。 我正在编写单元测试来检查 Android 应用程序的逻辑。在测试执行期间,我看到它在那一行失败了: if (!TextUtils.isEmpty(fromFile
虽然 oracles 方法的描述说仅当字符串长度为 0 时才返回 true,但 string utils 方法的描述说该方法还会检查字符串是否为“null”。那我应该用什么方法呢?如果字符串的长度为
你能帮我解决这个 VBA 代码吗?我认为问题在于 IsEmpty 函数中的 Cells 函数,即 Excel 指责错误的行。由于评论,我做了一些更改,但它仍然没有运行。问题在于 IsEmpty 函数的
我正在尝试弄清楚一些基本的事情。我在探索标准库ArrayList.java时发现ArrayList具有方法isEmpty()的实现。 ArrayList.java: public boolean is
我通过以下方式在 Controller 中查看: $data = Lib::index(); $view = View::make('index') ->with('data'
我必须优化和算法,我注意到我们有一个像这样的循环 while (!floorQueues.values().stream().allMatch(List::isEmpty)) 似乎在每次迭代中它都会检
我有关于代码装饰的问题。 例如我应该处理来自 DAO 的对象 val user1 = DAO.get(token) val user2 = DAO.get(token) val user3 = DAO
我有一个双向链表,并且我编写了一个函数来检查列表是否为空。 函数代码: int isEmpty(list *l) { if(l->head== NULL && l->tail== NULL)
我在实现扩展函数以确定实体是否包含任何结果时遇到了一些问题。最终目标是确定实体是否有结果,如果没有,则在应用程序启动时将其播种(对于某些实体,如国家/地区列表等...) 这是我能够得到的地方,但是 s
这两种方法有什么区别? public boolean nameControl(String str) { if (str.trim().isEmpty()) return false;
我正在寻找一个 if 语句来检查输入字符串是否为空或仅由空格组成,如果不是则继续下一个输入。下面是我目前的代码,当我输入空格时会出错。 name = name.trim().substring
我无法在将提供的值缩小为空对应值的类型约束方面正确实现通用 isEmpty(value)。 用例: function getCountryNameById(countries: LookupItem[
我正在 Eclipse 中处理一个学校项目,当我尝试在 String 上使用 isEmpty() 方法时,Eclipse 显示以下错误: The method isEmpty() is undefin
当我尝试使用 isEmpty 函数检查模型是否为空时,Laravel 5.6 出现错误。 型号: namespace App\Models\Projectmanagement; use Illumin
isEmpty的实现在 Option很简单 - 这是一个草图: abstract class Option[+A] { def isEmpty:Boolean } object
我是一名优秀的程序员,十分优秀!