对于你所说的数据量小于10的情况下,ArrayList<String> 和 HashMap<String, String>误差很小,使用哪个都不会影响性能;但从技术层讨论这个问题,就多啰嗦两句^^
ArrayList是有序集合,其底层其实就是一个数组,如果是遍历的话和存储相对于HashMap还是要快些,但其增加、删除会比较慢,特别是从列表中间增加、删除(扯远了)
而HashMap是一个无序哈希表,他的查询顺序是跟数据量直接关联的,简单点说就是数据量越大,查询越慢!
总结:
小数据:两者均可使用。
大数据:查询频繁使用ArrayList,增删、改频繁,使用HashMap。
超大数据:使用ArrayList;
举个例子,通讯录 a-z 进行分组,2万个好友,如果不进行分组,最差的时候要查2万次,平均找1万次,那么通过建立索引,要提高很多倍了。
但是我要跟大家说一个笑话,如果你的好友全是你的子孙,全跟你姓,那结果还是一样的 哈哈,除非不用姓。
那么 hashmap 是通过hashcode进行散列,hashcode 是如何分组不得而知,但是原理也是一样,尽可能的平均分布 均匀 ,比如1万个数据如果 只有10个组,或者说 100个组里面数据全部在 第一个组,这效率还是一样 速度比简单粗暴的list 更慢了,为什么速度更慢了?
比如1万个数据 分了100个组,但是数据在 第100组,是不是要查找100个组 然后找了100个组还不够,还要继续 循环1万次,这速度当然是没有提升反而更慢了。
那么这速度 平均1万次变成1001万了,搞毛线
再谈谈a-z的排序是否适合中文吧
我们中国有很多姓 ,但是有些字母似乎是用不到,但是如果用姓进行排序,那就可怕了,开个玩笑,over纯笔记,非论文
hashmap 是如何实现散列的呢算法, hashcode和内存地址关联,内存地址是有序的,比如22g那肯定是从xxx-到xxx ,那么如何散列是否跟开辟空间以及空间分配区域有关呢?
两种可选的方式
1:使用yield的懒惰加载,示例代码如下:
123456789101112
def read_in_chunks(file_object, chunk_size=1024): """Lazy function (generator) to read a file piece by piece Default chunk size: 1k""" while True: data = file_objectread(chunk_size) if not data: break yield data f = open('really_big_filedat')for piece in read_in_chunks(f): process_data(piece)
2:使用iter和一个帮助方法:
123456
f = open('really_big_filedat')def read1k(): return fread(1024) for piece in iter(read1k, ''): process_data(piece)
推荐使用第一个。
以上就是关于使用HashMap 存储键值对,哪个速度全部的内容,包括:使用HashMap 存储键值对,哪个速度、[笔记]为什么hashmap查询速度快 如何理解hashmap的散列、用python编程读取TXT时,数据大概有1千万条,速度很慢如何解决等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)