List和arrayList ,Map和HashMap的區(qū)別
一個(gè) List<Map>變量的內(nèi)部數(shù)據(jù)結(jié)構(gòu)
[{F_CITY_NAME=徐州, CNT=1141}, {F_CITY_NAME=鎮(zhèn)江, CNT=577}]
一個(gè)Map變量的內(nèi)部數(shù)據(jù)結(jié)構(gòu)
{泰州非邊界=7, 宿遷無(wú)=26, 無(wú)錫省邊界=6, 常州非邊界=10, 淮安地市邊界=70, 南京null=21}
在jsp頁(yè)面中不能通過(guò)${list.size}取列表長(zhǎng)度,而是
<%@ taglib uri="<%@ taglib prefix="fn" uri=">
list的長(zhǎng)度是:${fn:length(list)}
List是接口,List特性就是有序,會(huì)確保以一定的順序保存元素.
ArrayList是它的實(shí)現(xiàn)類,是一個(gè)用數(shù)組實(shí)現(xiàn)的List.
Map是接口,Map特性就是根據(jù)一個(gè)對(duì)象查找對(duì)象.
HashMap是它的實(shí)現(xiàn)類,HashMap用hash表實(shí)現(xiàn)的Map,就是利用對(duì)象的hashcode(hashcode()是Object的方法)進(jìn)行快速散列查找.(關(guān)于散列查找,可以參看<<數(shù)據(jù)結(jié)構(gòu)>>)
一般情況下,如果沒(méi)有必要,推薦代碼只同List,Map接口打交道.
比如:List list = new ArrayList();
這樣做的原因是list就相當(dāng)于是一個(gè)泛型的實(shí)現(xiàn),如果想改變list的類型,只需要:
List list = new LinkedList();//LinkedList也是List的實(shí)現(xiàn)類,也是ArrayList的兄弟類
這樣,就不需要修改其它代碼,這就是接口編程的優(yōu)雅之處.
另外的例子就是,在類的方法中,如下聲明:
private void doMyAction(List list){}
這樣這個(gè)方法能處理所有實(shí)現(xiàn)了List接口的類,一定程度上實(shí)現(xiàn)了泛型函數(shù).
如果開(kāi)發(fā)的時(shí)候覺(jué)得ArrayList,HashMap的性能不能滿足你的需要,可以通過(guò)實(shí)現(xiàn)List,Map(或者Collection)來(lái)定制你的自定義類.
PS:MAP是存在內(nèi)存中,所以他的讀取速度要比List快。
posted on 2013-11-28 15:36 半導(dǎo)體 閱讀(196) 評(píng)論(0) 編輯 收藏 所屬分類: JAVA語(yǔ)法