Array与ArrayList小记
为什么有Array还要有ArrayList
既生瑜何生亮,我都已经有Array去存取数据了为什么还要有ArrayList,甚至说 还有要有List和Dictionary 之类的存在。别问 问就是因为机器的性能有限=。=。
什么是Array
Array就是数组,那什么是数组,数组就是顺序表,那什么是顺序表:
特点之容量:比如你是个旅游区做缆车生意的,两座山距离有多远 揽绳就有多远(咋的,你还想移山?你也不是愚公),然后你很想赚钱,你拼命的往缆绳上挂缆车,然后你的绳子崩了,你被客户投诉,赔钱,最终你破产了。
特点之插队:比如你贷款换了个山头又做起了缆车生意,你吸取了上次的教训,走精英路线,你设置了VIP席位,加钱可以插队,给的越多,就能把位置加到别人前面去,但别人都坐上缆车走了一半了,这时候你要给人安排到他们前边去,怎么办!你得把前边的人喊回来然后让加钱的上去,别人再重新按照刚才的顺序再上车。很明显,你又被投诉,赔钱,然后破产了。
顺序表就是这样,容量是一开始就定好的,插入数据,就要把插入位置和后边的依次往后移动。那有人就想了,我能不能不在一开始定好大小,我能不能不移动数据就把新数据插入进去呢!答案当然是能啦👇
什么是ArrayList
我!ArrayList!不限定大小,想怎么插就怎么插!为啥我这么牛逼,因为我是线性表!什么是线性表?
特点之容量:牙疼不算病,疼起真要命!今天不知道怎么了,牙特别疼,赶紧去医院看病,发现人很多,赶紧取了号,这时候医院的系统从100个人排队变成101个。
特点之插队:前边还有100个人在排队,你等了2个小时,脸都疼肿了,下一个就是你了,突然叫号器响起,你准备起身,就听从里边传出,有请VIP-36号到诊区就诊!你这个气啊,这人比你来的晚,插你的队,甚至都不用让你移动一步(你是坐那等,没去堵门口),轻轻松松就插队了。
线性表的存储在物理上是不连续的(你等叫号时候也没站在别人身后等,你坐那等的),但顺序的连续的(100号后边就是你,你是101号),容量也是来一个加一个(你说医院坐满了怎么办。坐满了也不影响我区号,我还能网络取号!)。
那有了ArrayList为什么不删了Array
是嘞,你arraylist是来一个就加一个,无限扩大自己。我array一开始就圈好了地盘,但我地盘里每一寸土地我都记得,闭着眼都能找到我朋友的家,别人找我朋友时候,我分分钟就带他过去,你呢,你要不要打电话问问你手底下的人跑没跑别的城市买房啊?地盘小,我骄傲,我为国家省材料。
所以,Array相对ArrayList在内存上更紧凑,占地就小,读取就快。
什么时候用Array什么时候用ArrayList?
你应该已经知道怎么用了。不需要频繁插入,移除数据,还不是Array真香。
思考?
为什么还有List,Dictionary etc 这些家伙的存在,他们又提供了什么便利,又牺牲了什么?