Eralng的常用数据结构
1.记录(record)
适用于小数据,并且用属性名方便查找
2.Key/Value 类型
a.属性列表
就是类似[{Key, Value}]的列表,可以通过proplists模块来处理这样的列表
当涉及到下面的操作的时候,proplists的性能要比lists还差
Bifs: keymember/3, keysearch/3, keyfind/3
b.有序字典 orddict
基于lists实现的有序字典,每个键只出现一次,并且插入会重新排序(也就是整个列表重新排序咯),还有一个是dict,一样的接口,但是dict判断是用=:=,orddict用==
当元素小于75个的时候,在复杂性和效率之间做了很好的平衡(不过谁用的时候还看是不是小于75个??)
c.散列字典 dict
dict是基于散列存储数据的,所以增删和查找的速度都很快,综合了数组和链表的优点,而且dict比orddict而言可以存储大数据。
d.平衡树gb_trees
根据《erlang趣学指南》字典的读取性能最好,GB树在其他方面的性能就更快一些,不过当需要排序的时候自然只能选择二叉树
总的选择顺序是:dict/gb_trees > lists > orddict
当然了,当数据量小的时候,只考虑方便使用和可读行好的结构,最后附上一张图

3.集合
a.ordsets 适用小数据,最慢的一种集合,同样基于lists实现的,这说明什么呢,如果我们自己要实现某种结构,没有算法支持少用lists做底层
b.sets 和dict相似,那么也支持大数据,也是读取性能比较好
c.gb_sets
The complexity on set operations is bounded by either O(|S|) or O(|T| * log(|S|)), where S is the largest given set, depending on which is fastest for any particular function call. For operating on sets of almost equal size, this implementation is about 3 times slower than using ordered-list sets directly. For sets of very different sizes, however, this solution can be arbitrarily much faster; in practical cases, often 10-100 times. This implementation is particularly suited for accumulating elements a few at a time, building up a large set (> 100-200 elements), and repeatedly testing for membership in the current set.
As with normal tree structures, lookup (membership testing), insertion, and deletion have logarithmic complexity.
官方文档,在生成集合操作的复杂度比ordset慢3倍,更适合一次插入100-200以上的情况,另外,查找,插入,删除都是对数复杂度。
d.sofs 用于处理集合和集合之间的关系
4.有向图
digraph digraph_utils
5.队列
queue采用两个list来实现,效率也很高,之前还被考过,有空看一下源码怎么写的==
参考:
http://blog.51cto.com/10lover10/1085470
https://www.jianshu.com/p/f0cb1806132d
Eralng的常用数据结构的更多相关文章
- JAVA常用数据结构及原理分析
JAVA常用数据结构及原理分析 http://www.2cto.com/kf/201506/412305.html 前不久面试官让我说一下怎么理解java数据结构框架,之前也看过部分源码,balaba ...
- 常用数据结构及复杂度 array、LinkedList、List、Stack、Queue、Dictionary、SortedDictionary、HashSet、SortedSet
原文地址:http://www.cnblogs.com/gaochundong/p/data_structures_and_asymptotic_analysis.html 常用数据结构的时间复杂度 ...
- php常用数据结构
# 常用数据结构--------------------------------------------------------------------------------## 树(Tree)- ...
- Redis常用数据结构
Redis常用数据结构包括字符串(strings),列表(lists),哈希(hashes),集合(sets),有序集合(sorted sets). redis的key最大不能超过512M,可通过re ...
- Java 常用数据结构对象的实现原理 集合类 List Set Map 哪些线程安全 (美团面试题目)
Java中的集合包括三大类,它们是Set.List和Map, 它们都处于java.util包中,Set.List和Map都是接口,它们有各自的实现类. List.Set都继承自Collection接口 ...
- (6)Java数据结构-- 转:JAVA常用数据结构及原理分析
JAVA常用数据结构及原理分析 http://www.2cto.com/kf/201506/412305.html 前不久面试官让我说一下怎么理解java数据结构框架,之前也看过部分源码,balab ...
- 常用数据结构及算法C#/Java实现
常用数据结构及算法C#实现 1.冒泡排序.选择排序.插入排序(三种简单非递归排序) ,, , , , , , , , , }; //冒泡排序 int length = waitSort.Length; ...
- 图解Java常用数据结构(一)【转载】
最近在整理数据结构方面的知识, 系统化看了下Java中常用数据结构, 突发奇想用动画来绘制数据流转过程. 主要基于jdk8, 可能会有些特性与jdk7之前不相同, 例如LinkedList Linke ...
- 图解Java常用数据结构(一)
最近在整理数据结构方面的知识, 系统化看了下Java中常用数据结构, 突发奇想用动画来绘制数据流转过程. 主要基于jdk8, 可能会有些特性与jdk7之前不相同, 例如LinkedList Linke ...
随机推荐
- webp怎么打开 webp怎么转换成jpg
webp怎么打开 webp怎么转换成jpg 2 3 4 5 6 7 分步阅读 在使用google服务的时候(比如 google play),我们会发现保存的图都是webp格式. 那webp是什么东 ...
- WPF: WpfWindowToolkit 一个窗口操作库的介绍
在 XAML 应用的开发过程中,使用MVVM 框架能够极大地提高软件的可测试性.可维护性.MVVM的核心思想是关注点分离,使得业务逻辑从 View 中分离出来到 ViewModel 以及 Model ...
- 【JavaScript的基本语法】
[JavaScript的基本语法 ] 1.javascript输出 JavaScript语句向浏览器发出的命令.语句的作用是告诉浏览器该做什么. <script> documen ...
- linux(五)之vi编译器
前面介绍了linux的常用命令和对文本的操作,接下来我将对大家领略一下vi编译器的强大功能.希望大家觉得写的还不错的话可以点个“推荐”哦! 一.vim/vi编译器简介 Vim/Vi是一个功能强大的全屏 ...
- Codeforces Round #336 (Div. 2)【A.思维,暴力,B.字符串,暴搜,前缀和,C.暴力,D,区间dp,E,字符串,数学】
A. Saitama Destroys Hotel time limit per test:1 second memory limit per test:256 megabytes input:sta ...
- STOI补番队互测#2
Round2轮到我出了>_<(目测总共10人参加 实际共七人) 具体情况: #1: KPM,360 #2:ccz181078,160 #3:child,150 可惜KPM没看到第一题样例里 ...
- 树状数组-HDU1541-Stars一维树状数组 POJ1195-Mobile phones-二维树状数组
树状数组,学长很早之前讲过,最近才重视起来,enmmmm... 树状数组(Binary Indexed Tree(B.I.T), Fenwick Tree)是一个查询和修改复杂度都为log(n)的数据 ...
- React Native学习(四)—— 写一个公用组件(头部)
本文基于React Native 0.52 Demo上传到Git了,有需要可以看看,写了新内容会上传的.Git地址 https://github.com/gingerJY/React-Native-D ...
- qt中moc的作用
Qt 将源代码交给标准 C++ 编译器,如 gcc 之前,需要事先将这些扩展的语法去除掉.完成这一操作的就是 moc. moc 全称是 Meta-Object Compiler,也就是"元对 ...
- js获取不带单位的像素值
所谓获取不带单位的像素值就是获取比如元素的宽度.高度.字体大小.外边距.内边距等值但是去掉像素单位. 比如:某一个元素的宽度是100px,现在我要获取这个这个值但是不带单位“px”,对于这种问题你会怎 ...