Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(635)

Side by Side Diff: sdk/lib/collection/hash_set.dart

Issue 2567393002: Improve document for HashSet. (Closed)
Patch Set: Address comments. Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 part of dart.collection; 5 part of dart.collection;
6 6
7 /** Common parts of [HashSet] and [LinkedHashSet] implementations. */ 7 /** Common parts of [HashSet] and [LinkedHashSet] implementations. */
8 abstract class _HashSetBase<E> extends SetBase<E> { 8 abstract class _HashSetBase<E> extends SetBase<E> {
9 9
10 // The following two methods override the ones in SetBase. 10 // The following two methods override the ones in SetBase.
(...skipping 27 matching lines...) Expand all
38 * 38 *
39 * The elements of a `HashSet` must have consistent equality 39 * The elements of a `HashSet` must have consistent equality
40 * and hashCode implementations. This means that the equals operation 40 * and hashCode implementations. This means that the equals operation
41 * must define a stable equivalence relation on the elements (reflexive, 41 * must define a stable equivalence relation on the elements (reflexive,
42 * symmetric, transitive, and consistent over time), and that the hashCode 42 * symmetric, transitive, and consistent over time), and that the hashCode
43 * must consistent with equality, so that the same for objects that are 43 * must consistent with equality, so that the same for objects that are
44 * considered equal. 44 * considered equal.
45 * 45 *
46 * The set allows `null` as an element. 46 * The set allows `null` as an element.
47 * 47 *
48 * Most simple operations on `HashSet` are done in (potentially amorteized) 48 * Most simple operations on `HashSet` are done in (potentially amortized)
49 * constant time: [add], [contains], [remove], and [length], provided the hash 49 * constant time: [add], [contains], [remove], and [length], provided the hash
50 * codes of objects are well distributed. 50 * codes of objects are well distributed.
51 *
52 * The iteration order of the set is not specified and depends on
53 * the hashcodes of the provided elements. However, the order is stable:
54 * multiple iterations over the same set produce the same order, as long as
55 * the set is not modified.
51 */ 56 */
52 abstract class HashSet<E> implements Set<E> { 57 abstract class HashSet<E> implements Set<E> {
53 /** 58 /**
54 * Create a hash set using the provided [equals] as equality. 59 * Create a hash set using the provided [equals] as equality.
55 * 60 *
56 * The provided [equals] must define a stable equivalence relation, and 61 * The provided [equals] must define a stable equivalence relation, and
57 * [hashCode] must be consistent with [equals]. If the [equals] or [hashCode] 62 * [hashCode] must be consistent with [equals]. If the [equals] or [hashCode]
58 * methods won't work on all objects, but only on some instances of E, the 63 * methods won't work on all objects, but only on some instances of E, the
59 * [isValidKey] predicate can be used to restrict the keys that the functions 64 * [isValidKey] predicate can be used to restrict the keys that the functions
60 * are applied to. 65 * are applied to.
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
101 * Effectively a shorthand for: 106 * Effectively a shorthand for:
102 * 107 *
103 * new HashSet<E>(equals: identical, 108 * new HashSet<E>(equals: identical,
104 * hashCode: identityHashCode) 109 * hashCode: identityHashCode)
105 */ 110 */
106 external factory HashSet.identity(); 111 external factory HashSet.identity();
107 112
108 /** 113 /**
109 * Create a hash set containing all [elements]. 114 * Create a hash set containing all [elements].
110 * 115 *
111 * Creates a hash set as by `new HashSet<E>()` and adds each element of 116 * Creates a hash set as by `new HashSet<E>()` and adds all given [elements]
112 * `elements` to this set in the order they are iterated. 117 * to the set. The elements are added in order. If [elements] contains
118 * two entries that are equal, but not identical, then the first one is
119 * the one in the resulting set.
113 * 120 *
114 * All the [elements] should be assignable to [E]. 121 * All the [elements] should be assignable to [E].
115 * The `elements` iterable itself may have any element type, so this 122 * The `elements` iterable itself may have any element type, so this
116 * constructor can be used to down-cast a `Set`, for example as: 123 * constructor can be used to down-cast a `Set`, for example as:
117 * 124 *
118 * Set<SuperType> superSet = ...; 125 * Set<SuperType> superSet = ...;
119 * Set<SubType> subSet = 126 * Set<SubType> subSet =
120 * new HashSet<SubType>.from(superSet.where((e) => e is SubType)); 127 * new HashSet<SubType>.from(superSet.where((e) => e is SubType));
121 */ 128 */
122 factory HashSet.from(Iterable elements) { 129 factory HashSet.from(Iterable elements) {
123 HashSet<E> result = new HashSet<E>(); 130 HashSet<E> result = new HashSet<E>();
124 for (final e in elements) { 131 for (final e in elements) {
125 E element = e as Object/*=E*/; 132 E element = e as Object/*=E*/;
126 result.add(element); 133 result.add(element);
127 } 134 }
128 return result; 135 return result;
129 } 136 }
130 137
131 /** 138 /**
132 * Provides an iterator that iterates over the elements of this set. 139 * Provides an iterator that iterates over the elements of this set.
133 * 140 *
134 * The order of iteration is unspecified, 141 * The order of iteration is unspecified,
135 * but consistent between changes to the set. 142 * but consistent between changes to the set.
136 */ 143 */
137 Iterator<E> get iterator; 144 Iterator<E> get iterator;
138 } 145 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698