Old-John, потому что возвращение null само по себе никаких гарантий не нарушает. Обычно это нужно, чтобы совершить какие-то действия с объектом после удаления из мапы. Если так хранился, то и действовать надо соответственно.
В случае с HashSet при возврате null будет непонятно - объекта там не было или был.
Johnny_Bravo, почитай любой гайд по ресайклеру, сравни со своим кодом. Не буду же я тебе здесь пересказывать. На какие методы обратить внимание, написал.
dendead, тем, что для этого в андроиде есть специальные формат, более оптимизированный. Так ты делаешь двойную (и даже больше из-за человекочитаемости json) работу. Сначала сериализуешь в строку, потом эту строку в парсель ложишь. С парселабл есть оптимизации в системе, которые позволяют не сериализовать объекты в большинстве случаев. Кроме того, писать руками парселабл не надо, можно заюзать библиотеки.