diff --git a/src/libstd/collections/hash/map.rs b/src/libstd/collections/hash/map.rs index 4eb2c8f064414..4c58394b5f1ab 100644 --- a/src/libstd/collections/hash/map.rs +++ b/src/libstd/collections/hash/map.rs @@ -1906,7 +1906,10 @@ impl FromIterator<(K, V)> for HashMap impl Extend<(K, V)> for HashMap where K: Eq + Hash, S: BuildHasher { - fn extend>(&mut self, iter: T) { + fn extend>(&mut self, iterable: T) { + let iter = iterable.into_iter(); + let (lower_bound, _) = iter.size_hint(); + self.reserve(lower_bound); for (k, v) in iter { self.insert(k, v); } diff --git a/src/libstd/collections/hash/set.rs b/src/libstd/collections/hash/set.rs index ca5137e957362..c94c9f3ad893c 100644 --- a/src/libstd/collections/hash/set.rs +++ b/src/libstd/collections/hash/set.rs @@ -643,7 +643,10 @@ impl Extend for HashSet where T: Eq + Hash, S: BuildHasher, { - fn extend>(&mut self, iter: I) { + fn extend>(&mut self, iterable: I) { + let iter = iterable.into_iter(); + let (lower_bound, _) = iter.size_hint(); + self.reserve(lower_bound); for k in iter { self.insert(k); }