Почему ConcurrentHashMap put () возвращает null, но элемент помещен успешно?

1

Я определил такую карту:

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

Затем вызов (taskMap пуст), чтобы поставить задачу, будет возвращать значение null, а вызов logger вызовет исключение 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.

Теги:

1 ответ

7
Лучший ответ

Карта возвращает предыдущее ассоциированное значение. если ранее не было ассоциированного значения, оно возвращает 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
  • 0
    Итак, как я могу проверить, успешно ли работает put () или нет? всегда успех?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню