Java集合筆記

Collection

Collection
  • Collection:Collection接口是集合類(lèi)的根接口惧蛹,它有兩個(gè)接口香嗓,List是一個(gè)有序的集合,可以包含重復(fù)的元素,提供了按索引訪問(wèn)的方式迅诬,Set中不能包含重復(fù)的元素。
  • List:List里存放的對(duì)象是有序的,同時(shí)也是可以重復(fù)的,List有一系列和索引相關(guān)的方法睬棚,查詢速度快。因?yàn)橥鵯ist集合里插入或刪除數(shù)據(jù)時(shí)害晦,會(huì)伴隨著后面數(shù)據(jù)的移動(dòng)鳄逾,所有插入刪除數(shù)據(jù)速度慢。
  • Set:Set里存放的對(duì)象是無(wú)序汽摹,不能重復(fù)的,集合中的對(duì)象不按特定的方式排序圾旨,只是簡(jiǎn)單地把對(duì)象加入集合中。
  • 哈希表:數(shù)組和單項(xiàng)鏈表的結(jié)合魏蔗,哈希表本質(zhì)是一數(shù)組砍的,只不過(guò)這個(gè)數(shù)組中的每一個(gè)元素又是單項(xiàng)鏈表。

Collection方法莺治,了解了Collection中的方法廓鞠,也就了解了其子類(lèi)的方法。

方法 解釋
add() 確保此 collection 包含指定的元素
addAl() 將指定 collection 中的所有元素都添加到此 collection 中
clear() 移除此 collection 中的所有元素
contains() collection 包含指定的元素
equals() 比較此 collection 與指定對(duì)象是否相等
isEmpty() 如果此 collection 不包含元素
iterator() 返回在此 collection 的元素上進(jìn)行迭代的迭代器
remove() 移除指定元素的單個(gè)實(shí)例
removeAll() 移除 collection 中包含在指定 collection 中的所有元素
toArray 將集合轉(zhuǎn)換為數(shù)組

我們重點(diǎn)看iterator()谣旁,所有的集合類(lèi)床佳,都實(shí)現(xiàn)了Iterator接口,這是一個(gè)用于遍歷集合中元素的接口

Iterator it=c.iterator();//獲取迭代器
while(it.hasnext()){
    it.next()//獲取對(duì)于的元素
}

Map

Map
  • Map:Map是Java.util包中的另一個(gè)接口榄审,它和Collection接口沒(méi)有關(guān)系砌们,是相互獨(dú)立的,但是都屬于集合類(lèi)的一部分。Map包含了key-value對(duì)浪感。Map不能包含重復(fù)的key昔头,但是可以包含相同的value。
  • HashMap :HashMap是最常用的Map影兽,它根據(jù)鍵的HashCode值存儲(chǔ)數(shù)據(jù)揭斧,根據(jù)鍵可以直接獲取它的值,具有很快的訪問(wèn)速度峻堰,遍歷時(shí)讹开,取得數(shù)據(jù)的順序是完全隨機(jī)的。因?yàn)殒I對(duì)象不可以重復(fù)捐名,所以HashMap最多只允許一條記錄的鍵為Null旦万,允許多條記錄的值為Null,是非同步
  • Hashtable:Hashtable與HashMap類(lèi)似桐筏,HashMap是線程安全的纸型,它支持線程的同步,即任一時(shí)刻只有一個(gè)線程能寫(xiě)Hashtable梅忌,因此也導(dǎo)致了Hashtale在寫(xiě)入時(shí)會(huì)比較慢狰腌,它繼承自Dictionary類(lèi),不同的是它不允許記錄的鍵或者值為null牧氮,同時(shí)效率較低琼腔。
  • TreeMap:TreeMap實(shí)現(xiàn)SortMap接口,能夠把它保存的記錄根據(jù)鍵排序踱葛,默認(rèn)是按鍵值的升序排序(自然順序)丹莲,也可以指定排序的比較器,當(dāng)用Iterator遍歷TreeMap時(shí)尸诽,得到的記錄是排過(guò)序的甥材。不允許key值為空,非同步的性含;
  • Properties:Properties 類(lèi)表示了一個(gè)持久的屬性集洲赵。Properties 可保存在流中或從流中加載。屬性列表中每個(gè)鍵及其對(duì)應(yīng)值都是一個(gè)字符串Properties 繼承于 Hashtable商蕴,所以可對(duì) Properties 對(duì)象應(yīng)用 put 和 putAll 方法叠萍。應(yīng)該使用 setProperty 方法。

Map方法绪商,了解了Map中的方法苛谷,也就了解了其子類(lèi)的方法。

方法 解釋
clear() 從此映射中移除所有映射關(guān)系
containsKey() 如果此映射包含指定鍵的映射關(guān)系格郁,則返回 true
containsValue() 如果此映射將一個(gè)或多個(gè)鍵映射到指定值腹殿,則返回 true
equals() 比較指定的對(duì)象與此映射是否相等
get() 返回指定鍵所映射的值独悴;如果此映射不包含該鍵的映射關(guān)系,則返回 null赫蛇。
isEmpty() 如果此映射未包含鍵-值映射關(guān)系
[keySe()t 返回此映射中包含的鍵的
put() 將指定的值與此映射中的指定鍵關(guān)聯(lián)
putAll() 從指定映射中將所有映射關(guān)系復(fù)制到此映射中
remove() 如果存在一個(gè)鍵的映射關(guān)系绵患,則將其從此映射中移除
size() 返回此映射中的鍵-值映射關(guān)系數(shù)

通過(guò)迭代器遍歷集合

Iterator it = map.keySet().iterator();
    //獲取迭代器
    while(it.hasNext()){
      Object key = it.next();
      System.out.println(map.get(key));
}

總結(jié):

Vector和ArrayList

  • vector是線程同步的,所以它也是線程安全的悟耘。arraylist是線程異步的落蝙,是不安全的,一般用arraylist效率比較高暂幼。
  • 如果集合中的元素的數(shù)目大于目前集合數(shù)組的長(zhǎng)度時(shí)筏勒,vector增長(zhǎng)率為目前數(shù)組長(zhǎng)度的100%,而arraylist增長(zhǎng)率為目前數(shù)組長(zhǎng)度的50%旺嬉。如果在集合中使用數(shù)據(jù)量比較大的數(shù)據(jù)管行,用vector有一定的優(yōu)勢(shì)。
  • 如果查找一個(gè)指定位置的數(shù)據(jù)邪媳,vector和arraylist使用的時(shí)間是相同的捐顷,如果頻繁的訪問(wèn)數(shù)據(jù),這個(gè)時(shí)候使用vector和arraylist都可以雨效。而如果移動(dòng)一個(gè)指定位置會(huì)導(dǎo)致后面的元素都發(fā)生移動(dòng)迅涮,這個(gè)時(shí)候就應(yīng)該考慮到使用linklist,因?yàn)樗苿?dòng)一個(gè)指定位置的數(shù)據(jù)時(shí)其它元素不移動(dòng)。
  • ArrayList 和Vector是采用數(shù)組方式存儲(chǔ)數(shù)據(jù)徽龟,此數(shù)組元素?cái)?shù)大于實(shí)際存儲(chǔ)的數(shù)據(jù)以便增加和插入元素叮姑,都允許直接序號(hào)索引元素,但是插入數(shù)據(jù)要涉及到數(shù)組元素移動(dòng)等內(nèi)存操作据悔,所以索引數(shù)據(jù)快传透,插入數(shù)據(jù)慢,Vector由于使用了synchronized方法(線程安全)所以性能上比ArrayList要差极颓,LinkedList使用雙向鏈表實(shí)現(xiàn)存儲(chǔ)朱盐,按序號(hào)索引數(shù)據(jù)需要進(jìn)行向前或向后遍歷,但是插入數(shù)據(jù)時(shí)只需要記錄本項(xiàng)的前后項(xiàng)即可菠隆,所以插入數(shù)度較快托享。

arraylist和linkedlist

  • ArrayList是實(shí)現(xiàn)了基于動(dòng)態(tài)數(shù)組的數(shù)據(jù)結(jié)構(gòu),LinkedList基于鏈表的數(shù)據(jù)結(jié)構(gòu)浸赫。
  • 對(duì)于隨機(jī)訪問(wèn)get和set,ArrayList覺(jué)得優(yōu)于LinkedList赃绊,因?yàn)長(zhǎng)inkedList要移動(dòng)指針既峡。
  • 對(duì)于新增和刪除操作add和remove,LinedList比較占優(yōu)勢(shì)碧查,因?yàn)锳rrayList要移動(dòng)數(shù)據(jù)运敢。 這一點(diǎn)要看實(shí)際情況的校仑。若只對(duì)單條數(shù)據(jù)插入或刪除,ArrayList的速度反而優(yōu)于LinkedList传惠。但若是批量隨機(jī)的插入刪除數(shù)據(jù)迄沫,LinkedList的速度大大優(yōu)于ArrayList. 因?yàn)锳rrayList每插入一條數(shù)據(jù),要移動(dòng)插入點(diǎn)及之后的所有數(shù)據(jù)卦方。

HashMap與TreeMap

  • HashMap通過(guò)hashcode對(duì)其內(nèi)容進(jìn)行快速查找羊瘩,而TreeMap中所有的元素都保持著某種固定的順序,如果你需要得到一個(gè)有序的結(jié)果你就應(yīng)該使用TreeMap(HashMap中元素的排列順序是不固定的)盼砍。
  • 在Map 中插入尘吗、刪除和定位元素,HashMap是最好的選擇浇坐。但如果您要按自然順序或自定義順序遍歷鍵睬捶,那么TreeMap會(huì)更好。使用HashMap要求添加的鍵類(lèi)明確定義了hashCode()和 equals()的實(shí)現(xiàn)近刘。
    兩個(gè)map中的元素一樣擒贸,但順序不一樣,導(dǎo)致hashCode()不一樣觉渴。
    同樣做測(cè)試:
    在HashMap中介劫,同樣的值的map,順序不同,equals時(shí)疆拘,false;
    而在treeMap中蜕猫,同樣的值的map,順序不同,equals時(shí),true哎迄,說(shuō)明回右,treeMap在equals()時(shí)是整理了順序了的。

HashTable與HashMap

  • 同步性:Hashtable是線程安全的漱挚,也就是說(shuō)是同步的翔烁,而HashMap是線程序不安全的,不是同步的旨涝。
  • HashMap允許存在一個(gè)為null的key蹬屹,多個(gè)為null的value 。
  • hashtable的key和value都不允許為null白华。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末慨默,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子弧腥,更是在濱河造成了極大的恐慌厦取,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件管搪,死亡現(xiàn)場(chǎng)離奇詭異虾攻,居然都是意外死亡铡买,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人奢驯,你說(shuō)我怎么就攤上這事蔓腐。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我纠亚,道長(zhǎng),這世上最難降的妖魔是什么筋夏? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任蒂胞,我火速辦了婚禮,結(jié)果婚禮上条篷,老公的妹妹穿的比我還像新娘骗随。我一直安慰自己,他們只是感情好赴叹,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布鸿染。 她就那樣靜靜地躺著,像睡著了一般乞巧。 火紅的嫁衣襯著肌膚如雪涨椒。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,521評(píng)論 1 304
  • 那天绽媒,我揣著相機(jī)與錄音蚕冬,去河邊找鬼。 笑死是辕,一個(gè)胖子當(dāng)著我的面吹牛囤热,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播获三,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼旁蔼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了疙教?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤贞谓,失蹤者是張志新(化名)和其女友劉穎躺屁,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體经宏,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡犀暑,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了烁兰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片耐亏。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖沪斟,靈堂內(nèi)的尸體忽然破棺而出广辰,到底是詐尸還是另有隱情,我是刑警寧澤主之,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布择吊,位于F島的核電站,受9級(jí)特大地震影響槽奕,放射性物質(zhì)發(fā)生泄漏几睛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一粤攒、第九天 我趴在偏房一處隱蔽的房頂上張望所森。 院中可真熱鬧,春花似錦夯接、人聲如沸焕济。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)晴弃。三九已至,卻和暖如春逊拍,著一層夾襖步出監(jiān)牢的瞬間上鞠,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工顺献, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留旗国,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓注整,卻偏偏與公主長(zhǎng)得像能曾,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子肿轨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Collection ├List │├LinkedList │├ArrayList │└Vector │└Stac...
    AndyZX閱讀 875評(píng)論 0 1
  • 前言 Java中集合大家族的成員實(shí)在是太豐富了寿冕,有常用的ArrayList、HashMap椒袍、HashSet驼唱,也有不...
    AndryYu閱讀 1,438評(píng)論 0 1
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類(lèi)相關(guān)的語(yǔ)法驹暑,內(nèi)部類(lèi)的語(yǔ)法玫恳,繼承相關(guān)的語(yǔ)法辨赐,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 31,631評(píng)論 18 399
  • Java集合是java提供的工具包京办,包含了常用的數(shù)據(jù)結(jié)構(gòu):集合掀序、鏈表、隊(duì)列惭婿、棧不恭、數(shù)組、映射等财饥。Java集合工具包位...
    聶叼叼閱讀 493評(píng)論 0 2
  • 人的大腦內(nèi)存有限换吧,大腦的作用主要用于思考事務(wù)而非存儲(chǔ)。運(yùn)用現(xiàn)代工具來(lái)管理日常事務(wù)钥星,助我們一臂之力沾瓦!以下是部分好玩好...
    大向daisy閱讀 792評(píng)論 0 2