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