大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學(xué)習(xí)攻略 Java學(xué)習(xí) 企業(yè)常見的Java數(shù)據(jù)結(jié)構(gòu)面試題

企業(yè)常見的Java數(shù)據(jù)結(jié)構(gòu)面試題

更新時(shí)間:2020-07-13 15:23:33 來源:動(dòng)力節(jié)點(diǎn) 瀏覽2532次

請談一談,hashCode()和equals()方法的重要性體現(xiàn)在什么地方?

Java中的HashMap使用hashCode()和equals()方法來確定鍵值對的索引,當(dāng)根據(jù)鍵獲取值的時(shí)候也會(huì)用到這兩個(gè)方法。如果沒有正確的實(shí)現(xiàn)這兩個(gè)方法,兩個(gè)不同的鍵可能會(huì)有相同的hash值,因此,可能會(huì)被集合認(rèn)為是相等的。而且,這兩個(gè)方法也用來發(fā)現(xiàn)重復(fù)元素。所以這兩個(gè)方法的實(shí)現(xiàn)對HashMap的精確性和正確性是至關(guān)重要的。

請說一說,Java中的HashMap的工作原理是什么?

HashMap類有一個(gè)叫做Entry的內(nèi)部類。這個(gè)Entry類包含了key-value作為實(shí)例變量。每當(dāng)往hashmap里面存放key-value對的時(shí)候,都會(huì)為它們實(shí)例化一個(gè)Entry對象,這個(gè)Entry對象就會(huì)存儲在前面提到的Entry數(shù)組table中。Entry具體存在table的那個(gè)位置是根據(jù)key的hashcode()方法計(jì)算出來的hash值(來決定)。

介紹一下,什么是hashmap?

HashMap是一個(gè)散列表,它存儲的內(nèi)容是鍵值對(key-value)映射。HashMap繼承于AbstractMap,實(shí)現(xiàn)了Map、Cloneable、java.io.Serializable接口。HashMap的實(shí)現(xiàn)不是同步的,這意味著它不是線程安全的。它的key、value都可以為null。此外,HashMap中的映射不是有序的。

HashMap的實(shí)例有兩個(gè)參數(shù)影響其性能:“初始容量”和“加載因子”。容量是哈希表中桶的數(shù)量,初始容量只是哈希表在創(chuàng)建時(shí)的容量。加載因子是哈希表在其容量自動(dòng)增加之前可以達(dá)到多滿的一種尺度。當(dāng)哈希表中的條目數(shù)超出了加載因子與當(dāng)前容量的乘積時(shí),則要對該哈希表進(jìn)行rehash操作(即重建內(nèi)部數(shù)據(jù)結(jié)構(gòu)),從而哈希表將具有大約兩倍的桶數(shù)。通常,默認(rèn)加載因子是0.75,這是在時(shí)間和空間成本上尋求一種折衷。加載因子過高雖然減少了空間開銷,但同時(shí)也增加了查詢成本(在大多數(shù)HashMap類的操作中,包括get和put操作,都反映了這一點(diǎn))。在設(shè)置初始容量時(shí)應(yīng)該考慮到映射中所需的條目數(shù)及其加載因子,以便最大限度地減少rehash操作次數(shù)。如果初始容量大于最大條目數(shù)除以加載因子,則不會(huì)發(fā)生rehash操作。

hashmap共有4個(gè)構(gòu)造函數(shù):

//默認(rèn)構(gòu)造函數(shù)。HashMap()

//指定“容量大小”的構(gòu)造函數(shù)

HashMap(int capacity)

//指定“容量大小”和“加載因子”的構(gòu)造函數(shù)

HashMap(int capacity,float loadFactor)

//包含“子Map”的構(gòu)造函數(shù)

HashMap(Map<?extends K,?extends V>map)

講一講,如何構(gòu)造一致性哈希算法。

先構(gòu)造一個(gè)長度為232的整數(shù)環(huán)(這個(gè)環(huán)被稱為一致性Hash環(huán)),根據(jù)節(jié)點(diǎn)名稱的Hash值(其分布為[0,232-1])將服務(wù)器節(jié)點(diǎn)放置在這個(gè)Hash環(huán)上,然后根據(jù)數(shù)據(jù)的Key值計(jì)算得到其Hash值(其分布也為[0,232-1]),接著在Hash環(huán)上順時(shí)針查找距離這個(gè)Key值的Hash值最近的服務(wù)器節(jié)點(diǎn),完成Key到服務(wù)器的映射查找。

這種算法解決了普通余數(shù)Hash算法伸縮性差的問題,可以保證在上線、下線服務(wù)器的情況下盡量有多的請求命中原來路由到的服務(wù)器。

請問,Object作為HashMap的key的話,對Object有什么要求嗎?

要求Object中hashcode不能變。

請問hashset存的數(shù)是有序的嗎?

Hashset是無序的。

TreeMap和TreeSet在排序時(shí)如何比較元素?Collections工具類中的sort()方法如何比較元素?

TreeSet要求存放的對象所屬的類必須實(shí)現(xiàn)Comparable接口,該接口提供了比較元素的compareTo()方法,當(dāng)插入元素時(shí)會(huì)回調(diào)該方法比較元素的大小。TreeMap要求存放的鍵值對映射的鍵必須實(shí)現(xiàn)Comparable接口從而根據(jù)鍵對元素進(jìn)行排序。Collections工具類的sort方法有兩種重載的形式,第一種要求傳入的待排序容器中存放的對象比較實(shí)現(xiàn)Comparable接口以實(shí)現(xiàn)元素的比較;第二種不強(qiáng)制性的要求容器中的元素必須可比較,但是要求傳入第二個(gè)參數(shù),參數(shù)是Comparator接口的子類型(需要重寫compare方法實(shí)現(xiàn)元素的比較),相當(dāng)于一個(gè)臨時(shí)定義的排序規(guī)則,其實(shí)就是通過接口注入比較元素大小的算法,也是對回調(diào)模式的應(yīng)用(Java中對函數(shù)式編程的支持)。

企業(yè)常見的Java數(shù)據(jù)結(jié)構(gòu)面試題

以上就是動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)的小編針對“企業(yè)常見的Java數(shù)據(jù)結(jié)構(gòu)面試題”的內(nèi)容進(jìn)行的回答,希望對大家有所幫助,如有疑問,請?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。

提交申請后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 成人性色生活片免费看爆迷你毛片 | 欧美成人免费在线视频 | 九九亚洲视频 | 青娱乐国产在线视频 | 色综合视频 | 久久久精品波多野结衣 | 国产日韩欧美在线 | 国产成人精品天堂 | 免费一区| 伊人色综合久久天天 | 九七97影院理论片手机在线观看 | 久久中文字幕在线观看 | 国产高清看片日韩欧美久久 | 欧美视频在线观看一区二区 | 四虎免费播放观看在线视频 | 久久亚洲伊人中字综合精品 | 国产精品福利视频免费观看 | 九九色视频在线观看 | 色人久久 | 亚洲国产成人久久三区 | 不卡无毒免费毛片视频观看 | 亚洲综合在线播放 | 久久亚洲国产精品五月天 | 草草免费观看视频在线 | 2018久久久国产精品 | 亚洲精品久久久 | 欧美成人怡红院在线观看 | 久久黄色网址 | 国产在线精品一区免费香蕉 | 国产夜夜操 | 欧美午夜网 | 我不卡老子影院午夜伦我不卡四虎 | www.婷婷色 | 伊人网伊人网 | 亚洲一区二区三区影院 | 欧美男女爱爱视频 | 五月伊人网 | 久久精品国产影库免费看 | 综合久久久久久中文字幕 | 国产视频一二 | 亚洲天天综合 |