关于list,map,set的区别

29r52p5rmj.png

关于list,map,set的区别

首先他们都是集合,这里就先引申一下集合跟数组的区别,主要的区别还是在于数组是静态的,类型固定的。而集合是动态的,存放的类型可以不是一种。

接下来说一下集合三者的区别
他们都是一个接口
list有三个实现类,分别是:
LinkedList,基于链表实现,链表内存是散列的,增删快,查找慢;
ArrayList,基于数组实现,非线程安全,效率高,增删慢,查找快;
Vector,基于数组实现,线程安全,效率低,增删慢,查找慢;

下面来说一下ArrayList怎么个线程不安全,阅读ArrayList的add操作的源码,可知:
public boolean add(E e) {
ensureCapacityInternal(size + 1);
elementData[size++] = e;
return true;
}
这里是因为扩充size跟加集合是两步操作,既然是两步,有多个线程操作就会出现不同步,例如数据会被后一个线程覆盖,或者出现越界

现在说一下什么是链表,顾名思义,就是链式的,链表中的每一个元素成为每一个节点,节点就包括了储存数据元素的数据域跟储存下一个节点的指针域

链表又分为单向链表,双向链表,循环链表,双向链表的有两个链域分别是存储了前驱结点地址的左链域跟存储了后继节点地址的右链域。

关于链表的算法运用可以参考约瑟夫问题
cpu访问数据的顺序--》寄存器--》缓存--》内存--》外存
链表跟数组的对比,链表存储是散列的,而数组是连续的内存地址,所以查找操作他们的时间复杂度都是O(n),但是数组明显是要快的,因为CPU缓存会把一片连续的内存空间读入,而缓存的速率要比内存要快,CPU取数据,处理数据,都要寄存在寄存器中处理,缓存就是把内存中提取出来的数据暂时保存。但是插入跟删除操作,由于链表是是不连续的内存地址,而数组是连续的内存地址,其他结点都要同时向前或者向后移动,链表则不需要。

这里再说一下vector,因为他为了实现线程安全加了synchronize,所以查找就耗费很多时间,所以都比arraylist慢

下面再说一下map
map.entrySet()会把map的所有键值对拿出来放到集合里面
然后我们就可以这样遍历map
for(Map.Entry<String,Object>entry:map.entrySet())

map主要有两大实现类:Hashmap跟TreeMap
实际中我们用得最多得就Hashmap
简单说下HashMap的实现原理:

首先有一个每个元素都是链表(可能表述不准确)的数组,当添加一个元素(key-value)时,就首先计算元素key的hash值,以此确定插入数组中的位置,但是可能存在同一hash值的元素已经被放在数组同一位置了,这时就添加到同一hash值的元素的后面,他们在数组的同一位置,但是形成了链表,同一各链表上的Hash值是相同的,所以说数组存放的是链表。而当链表长度太长时,链表就转换为红黑树,这样大大提高了查找的效率。

这里讲一下如何提高hashmap的性能,通常构建HashMap的时候都会初始化数组,最消耗性能的时候也就是扩容数组的时候,如果我们能一开始大概估算到插入数据的量,然后可以自定义初始化数组长度

现在来讲一下什么叫红黑树

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,128评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,316评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,737评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,283评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,384评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,458评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,467评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,251评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,688评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,980评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,155评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,818评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,492评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,142评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,382评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,020评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,044评论 2 352

推荐阅读更多精彩内容