大战熟女丰满人妻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ù)文檔推薦 >>
主站蜘蛛池模板: 欧美日韩国产一区二区三区播放 | 亚洲区欧美中文字幕久久 | www.91在线观看| 欧美日韩亚洲区久久综合 | 天天综合天天综合 | 国产一区二区三区日韩 | 成人亚洲天堂 | se01国产短视频在线观看 | 高清中文字幕视频在线播 | 日韩中文字幕网 | 在线观看亚洲成人 | 天天操天天摸天天干 | 精品一区亚洲 | 精品无码久久久久久国产 | 网友自拍视频悠悠在线 | 奇米网久久 | 2020国产成人免费视频 | 欧美精品综合 | 一级做a爱片久久蜜桃 | 深夜天堂 | 欧美成人猛男性色生活 | 四虎影视在线看免费观看 | 清纯唯美亚洲综合日韩第 | 国产女人18一级毛片视频 | 99久久久精品免费观看国产 | 色悠久久综合 | 国产成人亚洲综合在线 | 911精品国产91久久久久 | 亚洲欧美精品在线 | 天天干天天拍天天射天天添天天爱 | 免费精品国产福利片 | 国产精品一区二区久久不卡 | 欧美区亚洲区 | 97se亚洲| 久视频在线| 亚洲欧美中文字幕在线网站 | 久久成人动漫 | 97人人艹 | 亚洲欧洲毛片 | 2020国产免费久久精品99 | 曰批免费视频播放在线看片一 |