美文网首页iOS 开发继续加油
【数据结构与算法 - Swift实现】01 - 数组和字典

【数据结构与算法 - Swift实现】01 - 数组和字典

作者: Lebron_James | 来源:发表于2019-05-07 00:05 被阅读35次

在学习其他更复杂的数据结构之前,我们先简单看看Swift标准库自带的数组和字典。

数组

数组是我们在开发中经常用到的,是一个有序的集合。可以通过索引来获取其中的元素。例如:

let persons = ["Lebron", "Love", "JR", "Korver"]
persons[0] // "Lebron"

从数组中取出元素所需时间为常量时间O(1),因为数组是在一块连续的内存中保存的,索引就是他的位置,不管数组有多大,都可以直接取出来。

插入操作

最简单的是新的元素是在数组最后面插入;最坏的情况就是从数组的最前面插入。一般我们需要考虑最坏的情况,所以插入操作的时间是线程时间O(n)n是元素的个数。可以想象一下我们在排队购买iPhone,有个流氓想要插到最前面,那么所有队伍中的人都后往后移。

另外一个影响插入时间的数组的容量。我们刚刚说到:数组是在一块连续的内存中保存的,当我们创建数组的时候,系统就会默认在内存中开一块连续空间来保存数组;如果后面发现这块内存不够用了,系统就必须在内存的另外一个位置,开辟一块更大的空间,然后把原有的元素复制到新的空间。所以,在开发中,如果我们知道数组需要存储多少个元素,可以调用array.reserveCapacity(100)告诉Swift在内存中预留出足够的空间。其实在Swift中,如果发现数组内存不够用的话,它会把数组的内存加1倍。

因为插入操作在数组中比较耗时,如果在开发中需要频繁的将新的元素插入到最前面,那么可以考虑用链表来代替数组。

字典

字典存储的是键值对,例如保存商品的库存:

let inventory = ["雪碧": 10, "可乐": 10]

// 插入新元素
inventory["薯片": 10]

字典的元素是无序的,也不能插入到指定的位置;字典中的必须遵循Hashable

因为是无序的,所有新元素插入到字典中所有的时间是常量时间O(1)

这里简单总结了数组和字典的一些特性。我们可以利用这两个基本的数据结构来实现更复杂的数据结构。

欢迎加入我管理的Swift开发群:536353151

下一篇文章:【数据结构与算法 - Swift实现】02 - 链表

相关文章

  • 【数据结构与算法 - Swift实现】01 - 数组和字典

    在学习其他更复杂的数据结构之前,我们先简单看看Swift标准库自带的数组和字典。 数组 数组是我们在开发中经常用到...

  • Swift 进阶 - 集合协议

    Swift 中集合协议是数组、字典、集合和字符串实现的基础,有一些数据结构和算法的知识,理解这部分内容更容易一些。...

  • iOS开发集锦之 2017.03.28(Swift 算法实战之路

    1. Swift 算法实战之路:数组,字符串,集合,与字典 作者: 故胤道长描述:Swift中数组、字符串、集合以...

  • Hash算法

    数据结构与算法分析:大纲数据结构:数组算法:hash算法算法:排序算法Java实现 1 Hash算法? 将任意长度...

  • 数据结构:数组

    00数据结构与算法分析:大纲01数据结构:数组02数据结构:链表03数据结构:栈03数据结构:队列 数组 数组是一...

  • Swift3.0 数组和字典的排序问题

    简单的实现swift中字典和数组内部排序问题,不用再单独写一个算法来实现排序了,简单快捷~ 1.数组元素从小到大排...

  • Swift 算法实战之路:链表

    上期我们探讨了使用Swift如何破解数组、字符串、集合、字典相关的算法题。本期我们一起来讲讲用Swift如何实现链...

  • 数据结构 & 算法 in Swift (一):Swift

    数据结构 & 算法 in Swift (一):Swift基础和数据结构 数据结构 & 算法 in Swift (一...

  • Note 3 Swift (1)

    Swift学习笔记 变量与常量 变量 常量 值类型与引用类型 值类型 引用类型 数组与字典 数组 字典

  • 无标题文章

    Swift算法俱乐部:Swift 链表数据结构@(Swift)在本教程中,我们将会在Swift 3中实现链表。##...

网友评论

    本文标题:【数据结构与算法 - Swift实现】01 - 数组和字典

    本文链接:https://www.haomeiwen.com/subject/vthjoqtx.html