为什么 ConcurrentHashMap put() 返回 null 但项目被成功放置



我定义了这样的地图:

private Map<Integer, MyTask> taskMap = new ConcurrentHashMap<Integer, MyTask>();

放置任务的调用(taskMap 为空)将返回 null,并且由于下面的 addTask.getTaskNameId() 调用,记录器调用将抛出空指针异常。

MyTask addedTask = taskMap.put(task.getId(), task);
logger.logTask("added task", "TaskMgmtMgr::registerTask()", "added task=" + addedTask.getTaskNameId());

但是我可以在上述记录器调用后立即使用这些语句验证任务是否已成功放入:

private String getAvailableTaskListStr()
    {
        Collection<MyTask> tasks = taskMap.values();
        if (tasks.isEmpty())
        {
            return "No running task";
        }
        String nameList = "";
        int index = 0;
        for (MyTask task : tasks)
        {
            if (index == 0)
            {
                nameList += task;
            }
            else
            {
                nameList += ", task";
            }
            index++;
        }
        return "TotalTasks in TaskMap is " + index + ": " + nameList;
    }

我很困惑。有人可以向我解释一下吗?我正在使用JDK 1.8.0_20。

Map 返回

以前的关联值。 如果之前没有值关联,则它将返回null . 这就是为什么你会得到null.

与键关联的上一个值,如果没有键的映射,则为 null

举个例子:

Map<Integer, String> taskMap = new ConcurrentHashMap<Integer, String>();
        String hello=taskMap.put(34, "Test1");
        System.out.println("hello "+hello);//It returns null
        hello=taskMap.put(34, "Test2");
        System.out.println("hello "+hello);//it returns Test1

输出:

hello null
hello Test1

相关内容

最新更新