我定义了这样的地图:
private Map<Integer, MyTask> taskMap = new ConcurrentHashMap<Integer, MyTask>();
由于下面的addTask.getTaskNameId()调用,放置任务的调用(taskMap为空)将返回null,而logger调用将引发null指针异常。
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