Skip to content

52-HashSet

HashSet 类型来构造只拥有不重复元素的 Collection。Collection具有遍历元素、添加元素、删除元素,但是没有修改单个元素功能。

HashSet 初始化

使用HashSet之前需要先导入包

typescript
import std.collection.*

然后可以进行初始化了

typescript
let a = HashSet<String>() // Created an empty HashSet whose element type is String
let b = HashSet<String>(100) // Created a HashSet whose capacity is 100
let c = HashSet<Int64>([0, 1, 2]) // Created a HashSet whose element type is Int64, containing elements 0, 1, 2
let d = HashSet<Int64>(c) // Use another Collection to initialize a HashSet
let e = HashSet<Int64>(10, {x: Int64 => (x * x)}) // Created a HashSet whose element type is Int64 and size is 10. All elements are initialized by specified rule function

需要注意的是,如果往 HashSet中存入了重复的元素,那么HashSet会自动过滤,如。

typescript
    let c = HashSet<Int64>([0, 1, 2, 2, 2, 2, 2, 2])
    println(c) // [0,1,2]

HashSet 访问

可以通过forin遍历HashSet访问每一个元素,同时它也存在size熟悉,用来获取整个HashSet的长度。

但是需要注意的是,使用forin访问HashSet每一个元素时,它不保证顺序,另外也不能通过下标直接访问HashSet元素。

  1. 下标访问,错误的示例。

    typescript
    let c = HashSet<Int64>([0, 1, 2])
    
    println(c[2]) // 下标访问出错
  2. forin遍历 每一个元素

    typescript
    let c = HashSet<Int64>([0, 1, 2])
    
    for (val in c) {
        println(val)
    }
  3. size获取HashSet长度

    typescript
    let c = HashSet<Int64>([0, 1, 2])
    
    println(c.size)

HashSet 增加

果需要将单个元素添加到 HashSet 里,请使用 put 函数。如果希望同时添加多个元素,可以使用 putAll 函数。

typescript
let mySet = HashSet<Int64>()
mySet.put(0) // mySet contains elements 0
mySet.put(0) // mySet contains elements 0
mySet.put(1) // mySet contains elements 0, 1
let li = [2, 3]
mySet.putAll(li) // mySet contains elements 0, 1, 2, 3

HashSet 删除

从 HashSet 中删除元素,可以使用 remove 函数,需要指定删除的元素。

typescript
let mySet = HashSet<Int64>([0, 1, 2, 3])
mySet.remove(1) // mySet contains elements 0, 2, 3

HashSet contains

可以使用contains方法判定某个元素是否存在于 HashSet中。

typescript
    let c = HashSet<Int64>([0, 1, 2])

    println(c.contains(1)) // true

Released under the MIT License.