我尝试使用 Set.remove(null) 从我的哈希集中删除 null。但它实际上并没有起作用。我在这里可能错了什么?

I tried to remove null from my Hashset using Set.remove(null). But it is not actually working. What could i have been wrong here.?

下面是我的代码。我试图从 List 和 Set 中删除空引用。我仍然可以看到 Null 出现在打印的 Hashset 中。我哪里错了?

public boolean checkStickySession(Map<String,List<String>> map1){
            List<String> sessionList = map1.get("sessionId");
            sessionList.removeAll(Collections.singleton(null));
            Set<String> sessionSet = new HashSet<String>(sessionList);
            boolean status=false;
            sessionSet.remove(null);
            logger.info("sessionSet::"+sessionSet);
            if(sessionSet != null && sessionSet.size()==1){
                status = true;
            }
            return status;
        }

很可能您有字符串 "null" 打印相同但不是相同的引用。如果您在调试器中单步执行代码,您将能够看到差异。

List<String> list = new ArrayList<>();
list.add("null");
list.add(null);
System.out.println(list); // prints [null, null]
assert list.size() == 2;
list.remove(null);
assert list.size() == 1;

list.remove(null); // can't remove the "null" this way.
assert list.size() == 1;

System.out.println(list); // prints [null]
list.remove("null");
assert list.size() == 0;