public void putAll(Map<? extends K, ? extends V> c) { if (c == _map) // special case return; if (_map instanceof LinkedHashMap) { int sz = c.size(); if (sz <= 0) { return; } List<Map.Entry<? extends K, ? extends V>> added = new ArrayList<Map.Entry<? extends K, ? extends V>>(c.size()); for (Map.Entry<? extends K, ? extends V> me : c.entrySet()) { K key = me.getKey(); if (_map.containsKey(key)) { put(key, me.getValue()); } else { added.add(me); } } for (Map.Entry<? extends K, ? extends V> me : added) { _map.put(me.getKey(), me.getValue()); } int len = added.size(); if (len > 0) { fireEvent(ListDataEvent.INTERVAL_ADDED, sz, sz + len - 1); } } else { // bug #1819318 Problem while using SortedSet with Databinding // bug #1839634 Problem while using HashSet with Databinding _map.putAll(c); fireEvent(ListDataEvent.CONTENTS_CHANGED, -1, -1); } }
public void putAll(Map c) { if (_map instanceof LinkedHashMap) { int sz = c.size(); if (sz <= 0) { return; } if (c == _map) { // special case return; } List added = new ArrayList(c.size()); for (Iterator it = c.entrySet().iterator(); it.hasNext(); ) { final Entry entry = (Entry) it.next(); Object key = entry.getKey(); Object val = entry.getValue(); if (_map.containsKey(key)) { put(key, val); } else { added.add(entry); } } for (Iterator it = added.iterator(); it.hasNext(); ) { final Entry entry = (Entry) it.next(); Object key = entry.getKey(); Object val = entry.getValue(); _map.put(key, val); } int len = added.size(); if (len > 0) { fireEvent(ListDataEvent.INTERVAL_ADDED, sz, sz + len - 1); } } else { // bug #1819318 Problem while using SortedSet with Databinding // bug #1839634 Problem while using HashSet with Databinding _map.putAll(c); fireEvent(ListDataEvent.CONTENTS_CHANGED, -1, -1); } }