HashSet
HashSet是set接口的實(shí)現(xiàn)類,set下面最主要的實(shí)現(xiàn)類就是HashSet(也就是用的最多的),此外還有LinkedHashSet和TreeSet。
HashSet是無序的、不可重復(fù)的。通過對(duì)象的hashCode和equals方法保證對(duì)象的唯一性。
HashSet內(nèi)部的存儲(chǔ)結(jié)構(gòu)是哈希表,是線程不安全的。
TreeSet
TreeSet對(duì)元素進(jìn)行排序的方式:
元素自身具備比較功能,需要實(shí)現(xiàn)Comparable接口,并覆蓋compareTo方法。
元素自身不具備比較功能,需要實(shí)現(xiàn)Comparator接口,并覆蓋compare方法。
LinkedHashSet
LinkedHashSet是一種有序的Set集合,即其元素的存入和輸出的順序是相同的。
說一下 HashSet 的實(shí)現(xiàn)原理?
HashSet實(shí)際上是一個(gè)HashMap實(shí)例,數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)都是數(shù)組+鏈表。
HashSet是基于HashMap實(shí)現(xiàn)的,HashSet中的元素都存放在HashMap的key上面,而value都是一個(gè)統(tǒng)一的對(duì)象PRESENT。
private static final Object PRESENT = new Object();
HashSet中add方法調(diào)用的是底層HashMap中的put方法,put方法要判斷插入值是否存在,而HashSet的add方法,首先判斷元素是否存在,如果存在則插入,如果不存在則不插入,這樣就保證了HashSet中不存在重復(fù)值。
通過對(duì)象的hashCode和equals方法保證對(duì)象的唯一性。
ArrayList 和 LinkedList 的區(qū)別是什么?
ArrayList是動(dòng)態(tài)數(shù)組的數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn),查找和遍歷的效率較高。
LinkedList 是雙向鏈表的數(shù)據(jù)結(jié)構(gòu),增加和刪除的效率較高。
更多關(guān)于“Java培訓(xùn)”的問題,歡迎咨詢千鋒教育在線名師。千鋒已有十余年的培訓(xùn)經(jīng)驗(yàn),課程大綱更科學(xué)更專業(yè),有針對(duì)零基礎(chǔ)的就業(yè)班,有針對(duì)想提升技術(shù)的好程序員班,高品質(zhì)課程助力你實(shí)現(xiàn)java程序員夢(mèng)想。