Как я понимаю, есть несколько способов (возможно, другие, а) создать неглубокую копию Map
в Java:Малая копия карты в Java
Map<String, Object> data = new HashMap<String, Object>();
Map<String, Object> shallowCopy;
// first way
shallowCopy = new HashMap<String, Object>(data);
// second way
shallowCopy = (Map<String, Object>) ((HashMap<String, Object>) data).clone();
Есть один способ предпочтительнее другой, и если да, то почему?
Следует упомянуть то, что второй способ дает предупреждение «Непроверенный бросок». Поэтому вам нужно добавить @SuppressWarnings("unchecked")
, чтобы обойти его, что немного раздражает (см. Ниже).
@SuppressWarnings("unchecked")
public Map<String, Object> getDataAsMap() {
// return a shallow copy of the data map
return (Map<String, Object>) ((HashMap<String, Object>) data).clone();
}
Хороший ответ, спасибо. – dcp
Да, это одна из моих любимых частей книги. – polygenelubricants
Я не люблю говорить, что clone() сломан. Я предпочитаю говорить, что клон был ужасным дизайнерским решением и может нанести вам вред, если вы не используете его должным образом.Кроме того, вы, возможно, никогда не доверяете другим методам clone(). Таким образом, мы в итоге похожи, стараемся избегать этого, но это не сломано. – santiagobasulto