java容器都有哪些 hashmap和hashset的區(qū)別?
hashmap和hashset的區(qū)別?映射集是具有一對(duì)屬性值的集,包括鍵和值。關(guān)鍵字鍵是唯一的,不會(huì)重復(fù)。地圖是有序的集合,所以查詢(xún)速度非常快。HashSet類(lèi)似于從HashMap中刪除值。說(shuō)白了,它
hashmap和hashset的區(qū)別?
映射集是具有一對(duì)屬性值的集,包括鍵和值。關(guān)鍵字鍵是唯一的,不會(huì)重復(fù)。地圖是有序的集合,所以查詢(xún)速度非???。HashSet類(lèi)似于從HashMap中刪除值。說(shuō)白了,它是一個(gè)只有一個(gè)鍵的HashMap集。集合是數(shù)學(xué)中定義的集合,因此元素?zé)o序,不能重復(fù)添加。Java程序集用的不多,地圖集中的HashMap集、列表集用的很多,如果有時(shí)間,最好學(xué)習(xí)ArrayList、LinkedList、HashMap三個(gè)集,希望這些對(duì)你有用。
為什么面試要問(wèn)hashmap的原理?
當(dāng)面試官詢(xún)問(wèn)HashMap的原理時(shí),他們可能只是在調(diào)查你是否有專(zhuān)門(mén)學(xué)習(xí)的精神,因?yàn)镠ashMap是最常用的。如果你不知道HashMap的原理,面試官可能會(huì)定義你只能使用任何東西,但你不知道原理?,F(xiàn)在有那么多人可以使用它,為什么選擇你呢?所以這個(gè)問(wèn)題可能是篩選的一個(gè)條件。
當(dāng)然,要知道主要的原理,才能更好的使用和解決問(wèn)題,這是最重要的。
hashmap和concurrentmap區(qū)別?
由于jdk1.2,一些hashmaps不是線(xiàn)程安全的,所以在進(jìn)行多線(xiàn)程處理時(shí)必須非常小心。從JDK1.5開(kāi)始,我們引入了并發(fā)包來(lái)實(shí)現(xiàn)map的線(xiàn)程安全。
此外,并發(fā)HashMap和hashtable之間的主要區(qū)別在于鎖的粒度以及如何鎖定它們。它可以簡(jiǎn)單地理解為將一個(gè)大哈希表分解為多個(gè),形成鎖分離。
從concurrent HashMap的代碼可以看出,它引入了“segment lock”的概念,可以理解為將一個(gè)大的map拆分成n個(gè)小的hashtables關(guān)鍵字.hashCode()以決定將鍵放入哪個(gè)哈希表。
在concurrent HashMap中,映射被劃分為n個(gè)段。當(dāng)你輸入和獲取時(shí),它是基于電流的關(guān)鍵字.hashCode()找出要放的段。
為什么java中聲明多用Map,List而不是具體實(shí)現(xiàn)類(lèi)型?
設(shè)計(jì)模式應(yīng)為適配器模式。
至于為什么要用map來(lái)實(shí)現(xiàn),我理解目的是用map的鍵來(lái)實(shí)現(xiàn)set的值不重復(fù)。
您可以看到HashSet的add方法使用了HashMap的put方法,它只是將值作為HashMap中的鍵
put的值直接定義了一個(gè)空對(duì)象