不同语言数组详解

1、基本写法

javascript 复制代码
//dart
List<int> list1 = [];
// 带初始值的数组
List<int> numbers = [1, 2, 3, 4, 5];
var fruits = ['苹果', '香蕉', '橙子']; // 推断为 List<String>


// Swift
var numbers: [Int] = [1, 2, 3]
let arr1:Array<String> = ["3","4"]

// Kotlin
val numbers: Array<Int> = arrayOf(1, 2, 3)  // 显式类型
val emptyArray: Array<String> = emptyArray()


// List(不可变默认)
val list = listOf(1, 2, 3)                  // 不可变列表
val mutableList = mutableListOf(1, 2, 3)    // 可变列表

// TypeScript
const numbers: number[] = [1, 2, 3];         // 显式类型

//Python
numbers = [1, 2, 3]                         # 字面量
names = list(("John", "Jane"))              # 构造函数

2、引用类型和值类型

上面几门语言中swift的数组是值类型,但是其他的是引用类型,值类型的数组具有以下特点:

(1)值类型写时赋值

javascript 复制代码
// 数组是值类型 - 验证
var array1 = [1, 2, 3]
var array2 = array1  // 这里可能创建副本(写时复制)
array1.append(4)     // 修改 array1 不会影响 array2

如果是引用类型那么array1和array2指向的是同一份内存地址,但是swift的值类型特性就不是这样

(2)值类型修改时地址变化

javascript 复制代码
var variableArray = [1, 2, 3]
print("初始地址:", Unmanaged.passUnretained(variableArray as AnyObject).toOpaque())

variableArray.append(4)          // [1, 2, 3, 4]
print("append后地址:", Unmanaged.passUnretained(variableArray as AnyObject).toOpaque())

variableArray[0] = 10            // [10, 2, 3, 4]  
print("修改元素后地址:", Unmanaged.passUnretained(variableArray as AnyObject).toOpaque())

variableArray = [5, 6, 7]        // 重新赋值
print("重新赋值后地址:", Unmanaged.passUnretained(variableArray as AnyObject).toOpaque())

初始地址: 0x0000600003e6c0a0
append后地址: 0x0000600003e6c1c0
修改元素后地址: 0x0000600003e6c1c0  // 可能与append后相同
重新赋值后地址: 0x0000600003e6c2e0

只要数组有变动就可能重新分配内存

3、可变与不可变

js/ts/python完全可变,但是swift和kotlin有不可变的数组,具体为:

swift:用let 和var来控制不可变与可变,用var申明就完全可变,用let申明就完全不可变,体现为,不可修改不可重新赋值

kotlin:用val和var来修饰的也能控制可变不可变,但是与swift完全不一样,val修饰的不可变不是真正意义的不可变,而是说不可以重新赋值,到可以修改内容,真正的不可变与可变通过不同的申明方式来实现,Array可变,List默认不可变

javascript 复制代码
val numbers: Array<Int> = arrayOf(1, 2, 3)  // 可变
val emptyArray: Array<String> = emptyArray()//可变


// List(不可变默认)
val list = listOf(1, 2, 3)                  // 不可变列表
val mutableList = mutableListOf(1, 2, 3)    // 可变列表

4、都支持 map、filter、reduce 等函数式操作

相关推荐
WG_1711 分钟前
Linux:环境变量
linux·运维·服务器
努力的小帅12 分钟前
Linux_基础IO(Linux入门到精通)
linux·动态库·静态库·计算机组成原理·io操作
txzz888816 分钟前
CentOS-Stream-10 系统安装之Firewalld防火墙配置
linux·运维·网络·计算机网络·centos·firewall-cmd·linux防火墙
Konwledging24 分钟前
VMA-virtual memory areas
linux
无事好时节25 分钟前
【Linux 进程详解】从 PCB 到 fork
linux
NZT-4828 分钟前
服务器访问github受限的解决办法
运维·服务器·github
kaoa00029 分钟前
Linux入门攻坚——57、HAProxy
linux·运维·服务器
总有刁民想爱朕ha30 分钟前
MySQL 8 Windows日常维护教程(安装、备份、还原、重置密码等)
windows·mysql
噜啦噜啦嘞好1 小时前
Linux——网络概念
linux·网络
博语小屋1 小时前
简单线程池实现(单例模式)
linux·开发语言·c++·单例模式