UNPKG

1.74 kBPlain TextView Raw
1import { HashTable } from "../hashtable/HashTable";
2import { AbstractSet } from "../interface/AbstractSet";
3/**
4 * 哈希集合
5 */
6export class HashSet<T= string> extends AbstractSet<T>{
7 private hashtable: HashTable<boolean>;
8 private static DEFAULT_TABLE_SIZE = 11;
9
10 public get Size(){
11 return this.hashtable.Count;
12 }
13
14 constructor(capacity = HashSet.DEFAULT_TABLE_SIZE){
15 super();
16 this.hashtable = new HashTable(capacity);
17 }
18 add(item: T){
19 // 以当前值为键,以布尔true为值存入哈希表中
20 // 通过布尔值判断是否存在于哈希表中
21 this.hashtable.put(item, true);
22 return this;
23 }
24
25 has(element: T){
26 return this.hashtable.contains(element);
27 }
28
29 remove(element: T){
30 return this.hashtable.remove(element);
31 }
32
33 clear(){
34 this.hashtable.clear();
35 }
36
37 /**
38 * 获取所有的值
39 */
40 entries(){
41 return this.hashtable.getOrignalKeys();
42 }
43
44 /**
45 * 获取左差集
46 * @param set
47 * @returns Array<T>
48 */
49 diff(set: AbstractSet<T>): Array<T>{
50 return super.diff(set);
51 }
52
53 /**
54 * 获取并集
55 * @param set
56 * @returns Array<T>
57 */
58 union(set: AbstractSet<T>): Array<T>{
59 return super.union(set);
60 }
61
62 /**
63 * 获取交集
64 * @param set
65 * @returns Array<T>
66 */
67 intersect(set: AbstractSet<T>): Array<T>{
68 return super.intersect(set);
69 }
70
71 /**
72 * 将数组转换为哈希集合
73 * @param array
74 */
75 static fromArray<T>(array: Array<T>){
76 const set = new HashSet<T>(array.length);
77 array.forEach(item => set.add(item));
78 return set;
79 }
80}