這篇文章主要講解了“Java數(shù)據(jù)結(jié)構(gòu)List與Map的用法”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Java數(shù)據(jù)結(jié)構(gòu)List與Map的用法”吧!
成都創(chuàng)新互聯(lián)主營甘南網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,成都App制作,甘南h5微信小程序定制開發(fā)搭建,甘南網(wǎng)站營銷推廣歡迎甘南等地區(qū)企業(yè)咨詢
1:集合 Collection(單列集合) List(有序,可重復(fù)) ArrayList 底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組,查詢快,增刪慢 線程不安全,效率高 Vector 底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組,查詢快,增刪慢 線程安全,效率低 LinkedList 底層數(shù)據(jù)結(jié)構(gòu)是鏈表,查詢慢,增刪快 線程不安全,效率高 Set(無序,唯一) HashSet 底層數(shù)據(jù)結(jié)構(gòu)是哈希表(實(shí)際上是一個(gè)HashMap實(shí)例)。 哈希表依賴兩個(gè)方法:hashCode()和equals() 執(zhí)行順序: 首先判斷hashCode()值是否相同 是:繼續(xù)執(zhí)行equals(),看其返回值 是true:說明元素重復(fù),不添加 是false:就直接添加到集合 否:就直接添加到集合 最終: 自動(dòng)生成hashCode()和equals()即可
LinkedHashSet 底層數(shù)據(jù)結(jié)構(gòu)由鏈表和哈希表組成。 由鏈表保證元素有序。 由哈希表保證元素唯一。 TreeSet 底層數(shù)據(jù)結(jié)構(gòu)是紅黑樹。(是一種自平衡的二叉樹) 如何保證元素唯一性呢? 根據(jù)比較的返回值是否是0來決定 如何保證元素的排序呢? 兩種方式 自然排序(元素具備比較性) 讓元素所屬的類實(shí)現(xiàn)Comparable接口 比較器排序(集合具備比較性) 讓集合接收一個(gè)Comparator的實(shí)現(xiàn)類對(duì)象 Map(雙列集合) A:Map集合的數(shù)據(jù)結(jié)構(gòu)僅僅針對(duì)鍵有效,與值無關(guān)。 B:存儲(chǔ)的是鍵值對(duì)形式的元素,鍵唯一,值可重復(fù)。 HashMap HashMap是Java 1.2引進(jìn)的基于哈希表Map接口的一個(gè)非同步實(shí)現(xiàn)(HashMap繼承于AbstractMap,AbstractMap完成了Map接口)。 此實(shí)現(xiàn)提供所有可選的映射操作,并允許使用null值和null鍵。此類不保證映射的順序,特別是它不保證該順序恒久不變。 底層數(shù)據(jù)結(jié)構(gòu)是[數(shù)組+鏈表]組成的。線程不安全,效率高 哈希表依賴兩個(gè)方法:hashCode()和equals() 執(zhí)行順序: 首先判斷hashCode()值是否相同 是:繼續(xù)執(zhí)行equals(),看其返回值 是true:說明元素重復(fù),不添加 是false:就直接添加到集合 否:就直接添加到集合 最終: 自動(dòng)生成hashCode()和equals()即可 LinkedHashMap 底層數(shù)據(jù)結(jié)構(gòu)由雙向循環(huán)鏈表和哈希表組成。 由鏈表保證元素有序。 由哈希表保證元素唯一。 Hashtable Hashtable是基于陳舊的Dictionary類,完成了Map接口。線程安全,效率低 哈希表依賴兩個(gè)方法:hashCode()和equals() 執(zhí)行順序: 首先判斷hashCode()值是否相同 是:繼續(xù)執(zhí)行equals(),看其返回值 是true:說明元素重復(fù),不添加 是false:就直接添加到集合 否:就直接添加到集合 最終: 自動(dòng)生成hashCode()和equals()即可 TreeMap 底層數(shù)據(jù)結(jié)構(gòu)是紅黑樹。(是一種自平衡的二叉樹) 如何保證元素唯一性呢? 根據(jù)比較的返回值是否是0來決定 如何保證元素的排序呢? 兩種方式 自然排序(元素具備比較性) 讓元素所屬的類實(shí)現(xiàn)Comparable接口 比較器排序(集合具備比較性) 讓集合接收一個(gè)Comparator的實(shí)現(xiàn)類對(duì)象
2.關(guān)于集合選取原則
是否是鍵值對(duì)象形式: 是:Map 鍵是否需要排序: 是:TreeMap 否:HashMap 不知道,就使用HashMap。 否:Collection 元素是否唯一: 是:Set 元素是否需要排序: 是:TreeSet 否:HashSet 不知道,就使用HashSet 否:List 要安全嗎: 是:Vector 否:ArrayList或者LinkedList 增刪多:LinkedList 查詢多:ArrayList 不知道,就使用ArrayList 不知道,就使用ArrayList
3:集合的常見方法及遍歷方式 Collection: add() remove() contains() iterator() size()
遍歷: 增強(qiáng)for 迭代器 |--List get() 遍歷: 普通for |--Set Map: put() remove() containskey(),containsValue() keySet() get() value() entrySet() size() 遍歷: 根據(jù)鍵找值 根據(jù)鍵值對(duì)對(duì)象分別找鍵和值
感謝各位的閱讀,以上就是“Java數(shù)據(jù)結(jié)構(gòu)List與Map的用法”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)Java數(shù)據(jù)結(jié)構(gòu)List與Map的用法這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!