实锤!JAVA集合就是最渣的渣男,最大的海王

我发现集合简直就是程序届的渣男,语言里的海王啊!而且一个个的还有自己的鱼塘,最重要的是这个鱼塘竟然还能动态扩容,简直是太可怕了。

                                                   

集合包含的内容太多了,我就从List开始解释为什么他们一个个的都是海王吧


               

                                        0x00 海王之ArrayList

 

ArrayList基于数组实现,所以查询快。每一个进到海王鱼塘的小姐姐,都有自己的名字,而名字就相当于数组的下标,那么海王只要记住每个人的名字就可以快速的知道她的所有信息。比如海王今天想找如花,只需要知道名字,就能知道如花的所有信息,啪的一下,很快啊。

 

                                      

一个合格的海王是不会随便停止往鱼塘注入漂亮的小姐姐的,但是鱼塘又必然有大小的限制的。

                                       

比如ArrayList默认的长度就是10,也就是说海王的鱼塘里最多只能有10条鱼,wtf?!那还怎么对的住海王的称号,不如直接改名叫塘主好了。怎么能让这么个小问题就阻挡住我登上海王宝座的道路哪?必须想办法解决,动态扩容就应运而生了。那么,ArrayList动态扩容机制是怎样的哪?先给大家看下最核心的一行代码:

 

计算扩容后的长度

每次增加当前容量的50%,也就是每次扩容1.5倍。那么,接下来就是尽情的向鱼塘中加入漂亮的小姐姐啦。

 

                                     


                                                                  0x01 海王之LinkedList

 

但是随着鱼塘中鱼儿越来越多,ArrayList的增删慢的缺点就越来越明显了,每次想在首位增加一个靓女,需要把之后所有的人都移动一次,真是费时费力。

于是,LinkedList吸取了ArrayList的缺点,进行了一系列的骚操作,引入了链表解决了增删慢和需要扩容的问题。每次增加小姐姐,只需要打断前后的连接,插入进去,就ok了,完美的避开了移动元素的问题,简直太省事了。

 

                                            

 

当然,世界上没有绝对的十全十美,LinkedList也不例外,增删虽然快了,查询也就相应慢了下来,就好比微信聊天记录,和小姐姐的对话框都是一个连一个的(对话框就好比内存地址),中间还会随机插入一个大老爷们,为了找到如花在哪里,就只能                

                                   

 


                                                                     0x03 海王之HashMap

 

就在海王队伍越发壮大的过程中,每个海王的鱼塘越来越大,小姐姐越来越多的时候,鱼塘的管理也越发的混乱,有时候为了找到如花的姐妹菜花,需要顺着链表一直找到最后,都没有找到,才发现原来她不在我的鱼塘,哭泣。

 

                                                               

于是HashMap为了避免每次花费大量的时间去找菜花,就引用了key-value的形式存储数据。我们把所有小姐姐的姓存为key,接着把姓相同的名字存入到一个List中,然后将这个List放到HashMap的value,下次查找菜花的时候只需要找到key为"菜"的所有人就好了。是不是又节省了一大笔时间。

同时HashMap又有默认大小为16的限制,所以吸取了ArrayList的经验,提前实现了动态扩容。给大家看下最核心的代码:

 

计算扩容后的长度

 

计算方法很简单,每次扩容2倍。

 


 

相信大家对集合中常见的海王都有了一定的印象,没印象的也不用着急,毕竟你可能也没机会当海王呢

 

 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值