集合、字典和散列表都可以存储不重复的值。
在集合中,我们感兴趣的是每个值本身,并把它当作主要元素。在字典和散列表中,我们用 [键,值] 的形式来存储数据。
集合(Set 类):[值,值]对,是一组由无序且唯一(即不能重复)的项组成的。
字典(Map 类):[键,值]对,也称作映射,其中键名是用来查询特定元素的。
散列(HashTable类/HashMap 类):[键,值]对,是Dictionary类的一种散列表实现方式。散列函数的作用是给定一个键值,然后返回值在表中的地址。散列算法的作用是尽可能快地在数据结构中找到一个值。
在一些编程语言中,还有一种叫作散列集合的实现。散列集合由一个集合构成,但是插入、移除或获取元素时,使用的是散列函数。实现散列集合的不同之处在于,不再添加键值对,而是只插入值而没有键。和集合相似,散列集合只存储唯一的不重复的值。
--------------------------------------------------------------------------
(1)集合方法声明:
首先,使用对象来表示集合。
|
序号
|
方法
|
说明
|
|
1
|
add(value) | 向集合添加一个新的项 |
|
2
|
remove(value) | 从集合移除一个值 |
|
3
|
has(value)
|
如果值在结合中,返回 true,否则返回 false |
|
4
|
clear ( )
|
移除集合中的所有项 |
|
5
|
size ( )
|
返回集合所包含元素的数量。与数组的 length 属性类似。 |
|
6
|
values ( )
|
返回一个包含集合中所有值的数组。
|
集合的实现:
1 function Set() { 2 var items = {}; 3 4 /*this.has = function(value) { 5 return value in items; // in 操作符会在通过对象访问给定属性时返回true,无论该属性存在于实例中还是原型中 6 }*/ 7 8 // better way 9 this.has = function(value) { 10 return items.hasOwnProperty(value); // hasOwnProperty()方法只在给定属性存在于对象实例中时,才会返回true 11 }; 12 13 this.add = function(value) { 14 if (!this.has(value)) { 15 items[value] = value; //添加一个值的时候,把它同时作为键和值保存,因为这样有利于查找这个值 16 reutrn true; // 返回true,表示添加了这个值 17 } 18 return false; // 返回false,表示没有添加它 19 }; 20 21 this.remove = function(value) { 22 if (this.has(value)) { 23 delete items[value]; // 既然用对象来存储集合的items对象,就可以简单地使用delete操作符从items对象中移除属性 24 return true; 25 } 26 return false; 27 }; 28 29 this.clear = function() { 30 items = {}; 31 }; 32 33 // size实现方法一(只能在现代浏览器中运行) 34 /*this.size = function() { 35 return Object.keys(items).length; // Object类有一个keys方法,返回一个包含给定对象所有属性的数组 36 }*/ 37 38 // size实现方法二(可以在任何浏览器上运行) 39 this.size = function() { 40 var count = 0; 41 for (var prop in items) { // for...in...用于枚举对象中的属性,包括实例和原型中的属性 42 if (items.hasOwnProperty(prop)) { // 检查它们是否是对象自身的属性 43 ++count; 44 } 45 } 46 return count; 47 }; 48 49 // values实现方法一,同size实现方法一 50 /*this.values = function() { 51 return Object.keys(items); 52 }*/ 53 54 // values实现方法二,同size实现方法二 55 this.values = function() { 56 var keys = []; 57 for (var key in items) { 58 keys.push(key); 59 } 60 return keys; 61 }; 62 }
(2)字典方法声明:
首先,使用对象来表示集合。
|
序号
|
方法
|
说明
|
|
1
|
set(key, value) | 向字典中添加新元素 |
|
2
|
remove(key) | 通过使用键值来从字典中移除键值对应的数据值 |
|
3
|
has(key)
|
如果某个键值存在于这个字典中,则返回 true,反之则返回 false |
|
4
|
get(key)
|
通过键值查找特定的数值并返回 |
|
5
|
clear ( )
|
将这个字典中的所有元素全部删除 |
|
6
|
size ( )
|
返回字典中所包含元素的数量。与数组的 length 属性类似。 |
|
7
|
keys()
|
将字典所包含的所有键名以数组形式返回
|
|
8
|
values ( )
|
将字典所包含的所有数值以数组形式返回 |
字典的实现: