集合、字典和散列表都可以存储不重复的值。
在集合中,我们感兴趣的是每个值本身,并把它当作主要元素。在字典和散列表中,我们用 [键,值] 的形式来存储数据。
集合(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 }
Set.js

 

(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 ( )
将字典所包含的所有数值以数组形式返回

字典的实现:

相关文章: