美文网首页
数组、链表、Hash的区别&优缺点 NSSet与NSA

数组、链表、Hash的区别&优缺点 NSSet与NSA

作者: 赫子丰 | 来源:发表于2018-08-08 14:31 被阅读288次

数组、链表、Hash的优缺点:

1、数组是将元素在内存中连续存放。

      链表中的元素在内存中不是顺序存储的,而是通过存在元素中的指针联系到一起。

2、数组必须事先定义固定的长度,不能适应数据动态地增减的情况。当数据增加时,可能超出原先定义的元素个数;当数据减少时,造成内存浪费。

           链表动态地进行存储分配,可以适应数据动态地增减的情况。

 3、(静态)数组从栈中分配空间, 对于程序员方便快速,但是自由度小。

链表从堆中分配空间, 自由度大但是申请管理比较麻烦。​

数组和链表在存储数据方面到底孰优孰劣呢?根据数组和链表的特性,分两类情况讨论。

一、当进行数据查询时,数组可以直接通过下标迅速访问数组中的元素。而链表则需要从第一个元素开始一直找到需要的元素位置,显然,数组的查询效率会比链表的高。

二、当进行增加或删除元素时,在数组中增加一个元素,需要移动大量元 素,在内存中空出一个元素的空间,然后将要增加的元素放在其中。同样,如果想删除一个元素,需要移动大量元素去填掉被移动的元素。而链表只需改动元素中的指针即可实现增加或删除元素。

那么,我们开始思考:有什么方式既能够具备数组的快速查询的优点又能融合链表方便快捷的增加删除元素的优势?HASH呼之欲出。

所谓的hash,简单的说就是散列,即将输入的数据通过hash函数得到一个key值,输入的数据存储到数组中下标为key值的数组单元中去。

hash表其实是结合了数组和链表的优点,进行的折中方案。平衡了数组和链表的优缺点。hash的具体实现有很多种,但是需要解决冲突的问题。​

不相同的数据通过hash函数得到相同的key值。这时候,就产生了hash冲突。解决hash冲突的方式有两种。一种是挂链式,也叫拉链法。挂链式的思想在产生冲突的hash地址指向一个链表,将具有相同的key值的数据存放到链表中。另一种是建立一个公共溢出区。将所有产生冲突的数据都存放到公共溢出区,也可以使问题解决。​

NSSet在实际应用中与NSArray区别不大,但是如果你希望查找NSArray中的某一个元素,则需要遍历整个数组,效率低下。而NSSet在查找某一特定的元素的时候则是根据hash算法直接找到此元素的位置,效率高。 NSSet是一个无序的,管理对个对象的集合类,最大特点是集合中不允许出现重复对象,和数学上的集合含义是一样的。除了无序,不许重复,其他功能和NSArray是一样的;需要注意的是:NSSet,NSArray里面只能添加cocoa对象,如果需要加入基本数据类型(int,float,BOOL,double等),需要将数据封装成NSNumber类型。主要是一些常见的操作,别外一些操作见其相应的文档,下面的代码部分还运用的第三方插件BlocksKit相结合;

相关文章

  • 数组、链表、Hash的区别&优缺点 NSSet与NSA

    数组、链表、Hash的优缺点: 1、数组是将元素在内存中连续存放。 链表中的元素在内存中不是顺序存储的,而是...

  • 数据结构——链表

    目录 1、属性 2、链表和数组的区别 2.1、数组概述 2.2、数组和链表优缺点 2.3、链表和数组的比较 3、单...

  • 为什么要用Hash

    数组、链表、Hash的优缺点: 1、数组是将元素在内存中连续存放。 链表中的元素在内存中不是顺序存储的,而是通过存...

  • 数组及链表

    数组和链表的区别及优缺点: 数组:有n个数的数组,知道起始位置后直接就能查找到里面的元素 链表:有n个数的链表,知...

  • redis-hash

    hash 字典 类似于java中的hashmap,数组加链表,碰撞进链表 区别: rehash过程不同,redis...

  • iOS NSSet、NSMutableSet、NSIndexSe

    一、集合(NSSet)和数组(NSArray)区别 1、集合:集合(NSSet)和数组(NSArray)有相似之处...

  • 大数据(架构师)面试系列(5)

    1.数组与链表的区别是什么? 线性表--数组和链表的区别链表和数组的区别在哪里? 2.Scala函数式编程的特点?...

  • Java集合源码分析之Map(一):超级接口Map

    数组与链表在处理数据时各有优缺点,数组查询速度很快而插入很慢,链表在插入时表现优秀但查询无力。哈希表则整合了数组与...

  • LinkedList分析及实现

    一. 简单总结 LinkedList底层实现方式是双向链表 链表的优缺点(当然是和数组比较而言)单链表的优缺点- ...

  • 链表

    链表 缺点:查找复杂有点:定点删除/插入元素 单链表 双向链表 循环链表 双向循环链表 数组与链表的区别 数据存储...

网友评论

      本文标题:数组、链表、Hash的区别&优缺点 NSSet与NSA

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