聯(lián)系人算法優(yōu)化

????????先說下功能需求,上傳聯(lián)系人鞠苟,因?yàn)槁?lián)系人可能過多乞榨,不上傳聯(lián)系人頭像,只上傳聯(lián)系人姓名当娱,號碼吃既,但是UI上展示已經(jīng)上傳的聯(lián)系人的時(shí)候又需要展示頭像,這時(shí)候跨细,只能是從服務(wù)器獲取到聯(lián)系人鹦倚,然后去匹配本機(jī)的聯(lián)系人,找到頭像冀惭,然后展示震叙。

????????有的同學(xué)說了,那簡單啊散休,兩層for循環(huán)嵌套下媒楼,找到本地的聯(lián)系人頭像展示就完事了,代碼大致是這種:


無腦循環(huán)法

????????上面這種戚丸,的確沒有BUG划址,但卻是一種很爛的算法,復(fù)雜度達(dá)到了O(N2)昏滴,如果別人聯(lián)系人非常多的情況下猴鲫,這種寫法,效率會(huì)低到不行谣殊。這種時(shí)候我們就要考慮進(jìn)行算法優(yōu)化拂共,經(jīng)過思考,選擇利用散列來將復(fù)雜度從 N2 降低到 N姻几,散列的話宜狐,讀取的復(fù)雜度是常量階(如果不了解散列數(shù)據(jù)結(jié)構(gòu)的同學(xué)可以自行去學(xué)習(xí)一把),在這種需求下蛇捌,對于Java已經(jīng)封裝好的散列結(jié)構(gòu)我認(rèn)為HashMap最適合抚恒。

? ? ? ? 思路就是,首先络拌,讓后臺拿到的Contact對象與本地拿到的Contact對象在 姓名 與 號碼一致的情況下 hashcode一致俭驮,這樣才能產(chǎn)生碰撞(對象放到散列數(shù)組里的位置是其hashCode值與散列大小決定的),然后就是覆蓋equals方法,當(dāng) 姓名 和 號碼一致混萝,就認(rèn)為其是同一個(gè)對象遗遵。這樣就可以以本地聯(lián)系人來覆蓋服務(wù)器拿到的聯(lián)系人,話不多說逸嘀,上代碼:


Contact對象的equals與hashCode方法

? ? ? ? 然后我們就可以建立一個(gè)以Contact對象為KEY车要,Contact的頭像Uri為value的HashMap

1.把后臺獲取到的Contact全部放到hashmap里,此時(shí)value全為null崭倘,因?yàn)楹笈_根本沒有頭像地址

2.把本地獲取到的Contact全部放到hashmap里翼岁,value對應(yīng)為本地獲取到的頭像Uri,此時(shí)司光,如果姓名 號碼 都一致琅坡,后臺獲取的Contact對象與本地的Contact對象就會(huì)產(chǎn)生碰撞,碰撞之后HashMap會(huì)判斷兩個(gè)對象是否 equal飘庄,如果不equal脑蠕,就把其插入到對應(yīng)散列位置的鏈表里,但是我們已經(jīng)覆蓋了equal方法跪削,所以肯定是相等的,hashmap就會(huì)直接用新插入的值覆蓋掉之前的值迂求。此時(shí)我們就得到了一個(gè)帶有本地聯(lián)系人頭像URI的hashmap.

3.遍歷服務(wù)器獲取到的聯(lián)系人碾盐,一一去hashmap取到頭像URI,塞入到服務(wù)器獲取到的聯(lián)系人對象里揩局。大功告成毫玖,上代碼:


運(yùn)用散列將算法優(yōu)化

總結(jié):代碼很簡單,只要思路對了凌盯,實(shí)現(xiàn)起來很快付枫。PS:之前獲取本地聯(lián)系人的時(shí)候,悶頭網(wǎng)上找一段拿來復(fù)制粘貼驰怎,結(jié)果就進(jìn)了坑阐滩,復(fù)制了一份雙層循環(huán)的查詢語句,后來仔細(xì)看的時(shí)候大概是先查詢到所有的contactId然后通過contactId去aw_contacts表中讀取raw_contact_id县忌,再用raw_contact_id到data表讀取所有信息掂榔,導(dǎo)致測試的時(shí)候,大概多于1000個(gè)聯(lián)系人的時(shí)候症杏,APP直接ANR装获,蠻尷尬。復(fù)制代碼需謹(jǐn)慎厉颤,哈哈穴豫。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市逼友,隨后出現(xiàn)的幾起案子精肃,更是在濱河造成了極大的恐慌秤涩,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肋杖,死亡現(xiàn)場離奇詭異溉仑,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)状植,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進(jìn)店門浊竟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人津畸,你說我怎么就攤上這事振定。” “怎么了肉拓?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵后频,是天一觀的道長。 經(jīng)常有香客問我暖途,道長卑惜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任驻售,我火速辦了婚禮露久,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘欺栗。我一直安慰自己毫痕,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布迟几。 她就那樣靜靜地躺著消请,像睡著了一般。 火紅的嫁衣襯著肌膚如雪类腮。 梳的紋絲不亂的頭發(fā)上臊泰,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天,我揣著相機(jī)與錄音存哲,去河邊找鬼因宇。 笑死,一個(gè)胖子當(dāng)著我的面吹牛祟偷,可吹牛的內(nèi)容都是我干的察滑。 我是一名探鬼主播,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼修肠,長吁一口氣:“原來是場噩夢啊……” “哼贺辰!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤饲化,失蹤者是張志新(化名)和其女友劉穎莽鸭,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吃靠,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡硫眨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了巢块。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片礁阁。...
    茶點(diǎn)故事閱讀 38,673評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖族奢,靈堂內(nèi)的尸體忽然破棺而出姥闭,到底是詐尸還是另有隱情,我是刑警寧澤越走,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布棚品,位于F島的核電站,受9級特大地震影響廊敌,放射性物質(zhì)發(fā)生泄漏铜跑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一骡澈、第九天 我趴在偏房一處隱蔽的房頂上張望疼进。 院中可真熱鬧,春花似錦秧廉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至减拭,卻和暖如春蔽豺,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背拧粪。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工修陡, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人可霎。 一個(gè)月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓魄鸦,卻偏偏與公主長得像,于是被迫代替她去往敵國和親癣朗。 傳聞我的和親對象是個(gè)殘疾皇子拾因,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,562評論 2 349

推薦閱讀更多精彩內(nèi)容

  • ¥開啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個(gè)線程,因...
    小菜c閱讀 6,367評論 0 17
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)绢记,斷路器扁达,智...
    卡卡羅2017閱讀 134,633評論 18 139
  • 我們感覺這個(gè)世界的美好 要么是因?yàn)橛字傻南矏?要么是因?yàn)樯羁痰乃伎?/div>
    小里飛叨閱讀 121評論 0 0
  • 上一章 | 目錄 第一百三十一章 約見 十五扽了扽白淺的袖子,催促道:“快走吧蠢熄,上面已經(jīng)過了禮單和聘書跪解,宴席馬上...
    娥媚閱讀 15,073評論 68 115
  • 愛 來的漫不經(jīng)心叉讥,最初只是一點(diǎn)喜歡 分開的時(shí)候,卻是兩份悲傷 時(shí)間久了 守著一種習(xí)慣 像喝水骏啰,像吃飯 心跳變得一樣...
    Skr啊閱讀 396評論 0 1