集合可变

  1. 集合的可变性

    用let创建的集合,大小、内容都是固定的;用var创建的集合,大小、内容都可变,这就是集合可变性。

  2. 集合的功能

    可以简单的把集合看做为多个数据的容器,放在容器中的数据可以通过容器统一操作。

  3. 数组 (Arrays)

    3.1概念:

    数组是有序的,数组中数据可重复,数组中只能存储同种类型数据。

    重点:有序、值可重复、同类型

    3.2定义:

    1)创建空数组:

    var 数组名=[数组类型]()

    类似于调用类的空构造函数创建对象

    2) 创建包含初始值的数组

  4. var a = [Int](count: 3, repeatedValue:0)

       3)两数组相加

       前提是,数组数据类型必须相同。

        3.3 访问和修改数组

        3.3.1 数组计数

        数组名.count可以返回整个数组长度,即数组中包含数据的个数。经常用于for循环中。

        3.3.2 数组增长

        使用数组.append方法,可以将新项增加到数组末尾。

        3.3.3 数组项方法

        可以使用:数组名[索引]访问第“索引值+1”项数据

        如:a[5]指的是a数组中第六项。 索引从0开始

        3.3.4 数组是否为空

        数组有一个属性isEmpty,布尔值,可以检查数组是否为空(数组中不包含数据项,count=0)。

        true为空,false为非空。

        3.3.5 数组增长

        可以使用+=来增长数组

        比如: var a=[1,2,3]

        a+=[5,6]

[1,2,3,5,6]

3.3.6 ...用法

可以使用数组名[索引i...索引j]一次访问多个数组项

比如:a[1...3]=[0,0,0]

[1,0,0,0,6]

3.3.7 在指定位置插入新项

调用数组的insert(_:atIndex:)方法来在某个具体索引值之前添加数据项:

a.inert(9,atIndex:0)

[9,1,0,0,0,0]

3.3.8 删除指定位置项目:

可以使用removeAtIndex(_:)方法来移除数组中的某一项。这个方法把数组在特定索引值中存储的数据项移除并且返回这个被移除的数据项(我们不需要的时候就可以无视它)

3.3.9 遍历

for item in 数组{

用item遍历数组

}

每次循环时,item都可以获取到当前索引值对应的数组项,可以通过操作item来获取数组中每一项。

### 编程中集合可变性和特性 #### Python 中的集合 在 Python 中,`set` 是一种可变集合类型,而 `frozenset` 则是一种不可变集合类型。 - **可变集合 (`set`) 的特点**: - 支持动态修改操作,例如添加、删除元素等[^3]。 - 提供了许多内置方法用于集合运算,如并集(`union`)、交集(`intersection`)、差集(`difference`)等。这些方法通常会返回一个新的集合对象,而不是直接修改原集合[^1]。 ```python # 示例代码展示 set 的可变性 s = {1, 2, 3} s.add(4) # 添加元素 print(s) # 输出: {1, 2, 3, 4} s.remove(2) # 删除元素 print(s) # 输出: {1, 3, 4} ``` - **不可变集合 (`frozenset`) 的特点**: - 不允许任何修改操作,因此可以作为字典键或其他集合的元素使用[^5]。 - 它的行为类似于 `set`,但在定义之后无法更改。 ```python fs = frozenset([1, 2, 3]) try: fs.add(4) # 尝试修改将抛出 AttributeError except AttributeError as e: print(e) ``` --- #### Java 中的集合 Java 中也有类似的区分,主要体现在 `Collections.unmodifiableSet()` 和其他工具类上。 - **可变集合的特点**: - 如普通的 `HashSet` 或 `TreeSet`,可以直接对其进行增删改操作[^2]。 - **不可变集合的特点**: - 使用 `Set.of(...)` 方法创建的集合是不可变的,这意味着一旦初始化完成就无法再改其内容[^2]。如果尝试向这种集合中添加重复项,则会被自动忽略。 ```java // 创建不可变集合 Set<String> immutableSet = Set.of("张三", "李四", "王五"); System.out.println(immutableSet); // 输出: [张三, 李四, 王五] // 尝试修改会报错 try { immutableSet.add("赵六"); // 抛出 UnsupportedOperationException } catch (UnsupportedOperationException e) { System.err.println(e.getMessage()); } ``` --- #### Scala 中的集合 Scala 同样提供了可变和不可变两种集合实现方式。 - **可变集合**:由 `scala.collection.mutable` 包提供支持,能够随时调整大小或更新内部状态[^4]。 - **不可变集合**:来自 `scala.collection.immutable` 包,默认情况下大多数标准库中的集合都是不可变设计。每次执行修改操作都会生成新的实例而非覆盖原有数据结构。 ```scala import scala.collection.mutable.Set val mutableSet = Set[Int]() // 初始化一个空的可变集合 mutableSet += 1 // 插入新值 println(mutableSet.contains(1)) // true val immutableSet = Set(1, 2, 3) // 默认为不可变集合 val updatedSet = immutableSet + 4 // 返回的是全新的集合副本 println(updatedSet.size) // 4 ``` --- #### 总结 无论是哪种语言,在处理集合时都需要明确该集合是否具备可变属性。这不仅影响到程序逻辑的设计思路,还可能涉及到性能优化方面的重要考量因素。总体而言: - 可变集合适合频繁改动场景; - 而不可变集合则更倾向于安全性较高的上下文中应用,比如多线程环境或者需要共享只读视图的情况下。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值