数组、链表、Hash的优缺点
来源:互联网 发布:安卓调音软件 编辑:程序博客网 时间:2024/06/01 22:14
IOS笔试题总结(数组、链表、Hash的优缺点)
数组、链表、Hash的优缺点:
1、数组是将元素在内存中连续存放。
链表中的元素在内存中不是顺序存储的,而是通过存在元素中的指针联系到一起。
2、数组必须事先定义固定的长度,不能适应数据动态地增减的情况。当数据增加时,可能超出原先定义的元素个数;当数据减少时,造成内存浪费。
链表动态地进行存储分配,可以适应数据动态地增减的情况。
3、(静态)数组从栈中分配空间, 对于程序员方便快速,但是自由度小。
链表从堆中分配空间, 自由度大但是申请管理比较麻烦。
数组和链表在存储数据方面到底孰优孰劣呢?根据数组和链表的特性,分两类情况讨论。
一、当进行数据查询时,数组可以直接通过下标迅速访问数组中的元素。而链表则需要从第一个元素开始一直找到需要的元素位置,显然,数组的查询效率会比链表的高。
二、当进行增加或删除元素时,在数组中增加一个元素,需要移动大量元 素,在内存中空出一个元素的空间,然后将要增加的元素放在其中。同样,如果想删除一个元素,需要移动大量元素去填掉被移动的元素。而链表只需改动元素中的指针即可实现增加或删除元素。
那么,我们开始思考:有什么方式既能够具备数组的快速查询的优点又能融合链表方便快捷的增加删除元素的优势?HASH呼之欲出。
所谓的hash,简单的说就是散列,即将输入的数据通过hash函数得到一个key值,输入的数据存储到数组中下标为key值的数组单元中去。
我们发现,不相同的数据通过hash函数得到相同的key值。这时候,就产生了hash冲突。解决hash冲突的方式有两种。一种是挂链式,也叫拉链法。挂链式的思想在产生冲突的hash地址指向一个链表,将具有相同的key值的数据存放到链表中。另一种是建立一个公共溢出区。将所有产生冲突的数据都存放到公共溢出区,也可以使问题解决。
hash表其实是结合了数组和链表的优点,进行的折中方案。平衡了数组和链表的优缺点。hash的具体实现有很多种,但是需要解决冲突的问题。
不相同的数据通过hash函数得到相同的key值。这时候,就产生了hash冲突。解决hash冲突的方式有两种。一种是挂链式,也叫拉链法。挂链式的思想在产生冲突的hash地址指向一个链表,将具有相同的key值的数据存放到链表中。另一种是建立一个公共溢出区。将所有产生冲突的数据都存放到公共溢出区,也可以使问题解决。
- 数组、链表、Hash的优缺点
- 线性表,树,hash表的优缺点
- 数组、链表、Hash
- 数组、链表、Hash
- 数组/链表/Hash
- 数组、链表、Hash
- 【转】数组、链表、Hash
- 数组、链表、Hash
- perl 数组的hash表
- 数组和链表的优缺点
- 数组和链表的优缺点
- 数组与链表的优缺点
- 链表和数组的优缺点
- 链表和数组的优缺点
- 数组与链表的优缺点
- 数组和链表的优缺点
- 数组与链表的优缺点分析
- 数组和链表的优缺点比较
- ScheduledExecutorService实现延迟执行
- 5、Hadoop datanode无法启动,报错: java.io.IOException: Incompatible clusterIDs
- 关于火狐等浏览器不兼容Easy UI的combobox中文取值问题的折中解决方式
- File操作一些常用场景
- Windows下charles 使用教程指南
- 数组、链表、Hash的优缺点
- 8款效果惊艳的HTML5 3D动画
- 设计模式(10)--组合模式
- 自助搭建mysql-canal-kafka通道
- 在django的子模版中加入js或者css文件
- echarts x/y轴坐标文字过长解决办法-换行
- Scrapy爬虫框架(二):导出爬取结果
- 通过C#/.NET API使用CNTK
- Mybatis源码解析