不同语言数组详解

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 等函数式操作

相关推荐
xkxnq1 天前
第四阶段:Vue 进阶与生态整合(第 58 天)(Vue 项目部署:打包、上线与服务器配置)
服务器·前端·vue.js
Doro再努力1 天前
【Linux04】 Linux基础指令完结与Linux权限初识(一)
linux·运维·服务器
江畔何人初1 天前
k8s中namespace与容器cgroup区别
linux·运维·云原生
DARLING Zero two♡1 天前
白板协作总卡壳?Tldraw+cpolar 解锁跨地域实时共创
服务器
草莓熊Lotso1 天前
远程控制软件实测!2026年1月远程软件从“夯”到“拉”全功能横评
运维·服务器·数据库·人工智能
次旅行的库1 天前
不能将windows本地虚拟环境打包到实验室服务器
linux·windows·conda
沐雪架构师1 天前
LangChain 1.0 记忆管理:短期与长期记忆详解
服务器·数据库·langchain
艾莉丝努力练剑1 天前
【Linux进程控制(三)】实现自主Shell命令行解释器
linux·运维·服务器·c++·人工智能·安全·云原生
中二病码农不会遇见C++学姐1 天前
文明6 Mod制作核心组件关系解密:从XML到游戏的奇幻漂流
java·运维·服务器·游戏
?re?ta?rd?ed?1 天前
计算机中的进程状态与linux中如何管理进程
linux·运维·服务器