日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Java中使用HashMap改進(jìn)查找性能的步驟

瀏覽:148日期:2022-08-17 08:17:46

Java中,HashMap,其實(shí)就是鍵值對(duì)。一個(gè)Key,對(duì)應(yīng)一個(gè)值;寫數(shù)據(jù)時(shí),指定Key寫對(duì)應(yīng)值;讀取時(shí)憑Key找到相應(yīng)值。感覺(jué)就跟Redis差不多。

// 創(chuàng)建 HashMap 對(duì)象 SitesHashMap<Integer, String> Sites = new HashMap<Integer, String>();// 添加鍵值對(duì)Sites.put(1, 'Google');Sites.put(2, 'Runoob');Sites.put(3, 'Taobao');Sites.put(4, 'Zhihu');//讀取String val = Sites.get(1);//得到Google

為什么說(shuō)可以用HashMap來(lái)改進(jìn)性能呢?原因不是說(shuō)HashMap這種數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)性能就比其他的,比如數(shù)組,集合先進(jìn)多少。我主要看中的,是在知道Key的情況下,找到相應(yīng)值得速度非常快。如果是用數(shù)組,最簡(jiǎn)單的,用循環(huán);講究一點(diǎn),排好序,用折半查找(二分查找)。都比不上用Key在HashMap里直接讀取。不知道為什么HashMap在查找方面為啥這么快,估計(jì)是存儲(chǔ)結(jié)構(gòu),使用了啥樹(shù),并為Key建立了索引。這是另外一個(gè)課題,以后再了解。昨天,我只是利用了這個(gè)特性,將運(yùn)行幾個(gè)小時(shí)都沒(méi)結(jié)束的問(wèn)題,只耗費(fèi)了十幾秒。

問(wèn)題如下:有25萬(wàn)條記錄,每條記錄含經(jīng)緯度;存在不同記錄坐標(biāo)相同情況。現(xiàn)在想將坐標(biāo)相同的記錄歸并在一起。

如果數(shù)據(jù)是保存在數(shù)據(jù)庫(kù)里,那么用SQL進(jìn)行坐標(biāo)分組,應(yīng)該能解決問(wèn)題。然而并沒(méi)有數(shù)據(jù)庫(kù),數(shù)據(jù)是從gdb文件里讀出來(lái)的。

好吧,將數(shù)據(jù)保存到數(shù)組里,再新建一個(gè)集合;然后循環(huán)數(shù)組,與新集合中的記錄逐個(gè)比較,坐標(biāo)相同就歸并到新集合,不同就插入新集合。最簡(jiǎn)單了。結(jié)果2個(gè)小時(shí)過(guò)去了,還沒(méi)有結(jié)束的跡象。

想想也對(duì),新集合越來(lái)越大,比較的次數(shù)也越來(lái)越多,仿佛棋盤里的大米一樣,每格的大米數(shù)量是前一格的兩倍;最后即使是整個(gè)國(guó)家糧庫(kù)的大米都放進(jìn)去,都填不滿整個(gè)棋盤。

將25萬(wàn)條記錄先排好序再處理?單是排序就忙死了,不行吧。

將25萬(wàn)條記錄先保存到數(shù)據(jù)庫(kù)里,再分組?應(yīng)該也可以,但總覺(jué)得笨了一些,而且速度應(yīng)該也是以分鐘算的。

最后決定用HashMap來(lái)做這個(gè)新集合。如上所述,HashMap按照Key來(lái)寫入或讀取值。關(guān)鍵是這個(gè)Key怎么得來(lái)。上面的例子,是寫代碼的人自己給出了一些字符作為Key。而在我們項(xiàng)目中,可以用經(jīng)緯度之和的哈希值來(lái)作為Key。哈希值相同的,就認(rèn)為是經(jīng)緯度相同,只需要判斷新集合中,是否存在這個(gè)Key對(duì)應(yīng)的元素就可以了,根本無(wú)須循環(huán)比較。

由于存在兩個(gè)不同的經(jīng)緯度加起來(lái),結(jié)果是一樣的可能性,因此先將經(jīng)度 乘以1000,再加緯度,這樣基本杜絕沖突的機(jī)會(huì)。

代碼如下:

private HashMap<Long,SimpleItem> recGeo(HashMap<Long, SimpleItem> map,String geo,int j){ /* 將相同坐標(biāo)的記錄合成一條 HashMap<Long, SimpleItem> map, 新集合 String geo, 坐標(biāo)字符串 int j 記錄ID */ try { Point p = (Point)reader.read(geo); /* 計(jì)算哈希值 因?yàn)槿绻捎醚h(huán)來(lái)比較,數(shù)據(jù)量太大,速度太慢了 為避免不同坐標(biāo)出現(xiàn)經(jīng)度+緯度結(jié)果相同的情況,將經(jīng)度 * 1000再相加 */ //計(jì)算Key long k = Long.valueOf(Double.doubleToLongBits(p.getX() * 1000 + p.getY())).hashCode();SimpleItem si = map.get(k); if(si != null){//新集合中該Key對(duì)應(yīng)元素已存在,應(yīng)該是相同坐標(biāo)的記錄 si.getPointers().add(j);//歸并 } else {//否則插入 si = new SimpleItem(); si.setGeo(geo); List<Integer> pointers = new ArrayList(); pointers.add(j); si.setPointers(pointers); map.put(k,si); } } catch (ParseException e) { e.printStackTrace(); } return map;}private static GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory( null );private static WKTReader reader = new WKTReader( geometryFactory );class SimpleItem{ private Point geo; private List<Integer> pointers; public Point getGeo() { return geo; } public void setGeo(String geo) { try { this.geo = (Point)reader.read(geo); } catch (ParseException e) { e.printStackTrace(); } } public List<Integer> getPointers() { return pointers; } public void setPointers(List<Integer> pointers) { this.pointers = pointers; }}

短短幾秒,新集合即得到5萬(wàn)個(gè)元素。

以上就是Java中使用HashMap改進(jìn)查找性能的步驟的詳細(xì)內(nèi)容,更多關(guān)于Java HashMap改進(jìn)查找性能的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
激情欧美一区| 美腿丝袜亚洲三区| 麻豆一区二区99久久久久| 日韩在线一区二区| 久久亚洲风情| 日韩中文字幕91| 亚洲香蕉久久| 中文字幕av一区二区三区人| 亚洲日本欧美| 青青伊人久久| 国产精品二区影院| 红杏一区二区三区| av综合电影网站| 久久蜜桃精品| 国产亚洲午夜| 五月激激激综合网色播| 日韩av一二三| 国产精品久久久久久久久久白浆 | 婷婷丁香综合| 美日韩精品视频| 日本不卡视频在线观看| 国产精品一区高清| 精品视频高潮| av高清不卡| 亚洲免费网址| 日韩精品中文字幕一区二区| 国产毛片精品| 国产精品精品| 久久裸体视频| 综合激情一区| 国产日韩精品视频一区二区三区| 日本三级亚洲精品| 高清日韩中文字幕| 激情婷婷综合| 日本欧美一区| 美女福利一区二区三区| 黑丝一区二区| 欧美自拍一区| 欧美一级鲁丝片| 亚洲在线免费| 国产精品欧美大片| 国产99久久久国产精品成人免费| 美国欧美日韩国产在线播放| 国产欧美久久一区二区三区| 国产色播av在线| 亚洲欧美日韩国产综合精品二区| 亚洲精品欧洲| 国产精品国产三级国产在线观看| 亚洲一级在线| 美女视频一区在线观看| 激情六月综合| 国产九九精品| 91精品蜜臀一区二区三区在线| 亚洲精品系列| 亚洲在线国产日韩欧美| 久久精品五月| 日韩中文字幕1| 成人午夜在线| 午夜天堂精品久久久久| av资源亚洲| 日本不卡不码高清免费观看| 精品一区av| 婷婷亚洲五月| 国产在线不卡一区二区三区| 久热re这里精品视频在线6| 亚洲精品大全| 伊人精品一区| 国产精成人品2018| 国产视频欧美| 91亚洲一区| 日本精品在线播放| 亚洲特色特黄| 久久久91麻豆精品国产一区| 国产日韩综合| 91看片一区| 欧美日韩在线精品一区二区三区激情综合 | 国产真实久久| 国产精品18| 免费不卡在线观看| 日韩免费一区| 国产日韩视频在线| 快she精品国产999| 久久91视频| 日韩av网站免费在线| 色在线中文字幕| 麻豆精品99| 免费人成在线不卡| 日韩免费av| 国产欧美视频在线| 黑丝一区二区三区| av日韩中文| 国产精品一区亚洲| 亚洲一区欧美| 亚洲一区中文| 国产综合亚洲精品一区二| 欧美国产美女| 国产精品videossex久久发布 | 亚洲视频国产精品| 精品在线99| 美日韩一区二区三区| 天堂成人国产精品一区| 欧美亚洲日本精品| 国产精品分类| 日本久久一区| 亚洲三区欧美一区国产二区| 美女久久99| 好看的av在线不卡观看| 国产精品三级| 欧美在线看片| 日韩国产在线| 亚洲精品影视| 亚洲专区一区| 日韩国产专区| 国产欧美大片| 午夜影院一区| 99精品视频精品精品视频| 麻豆国产精品777777在线| 国产精品欧美大片| 亚洲精品成人一区| 蜜桃久久久久久久| 亚洲免费网址| 怡红院精品视频在线观看极品| 福利一区视频| 免费在线日韩av| 国产精品一区二区精品 | 国产一区日韩欧美| 国内揄拍国内精品久久| 国产精品传媒麻豆hd| 91亚洲无吗| 青青草精品视频| 91九色综合| 国产精品日本一区二区三区在线| 91亚洲精品视频在线观看 | 伊人www22综合色| 亚洲三级国产| 日本成人在线不卡视频| 婷婷五月色综合香五月| 亚洲青青久久| 日韩一区二区三区精品| 亚洲日本久久| 中文无码日韩欧| 日韩一区二区三区精品 | 综合欧美亚洲| 日本视频一区二区| 国产欧美69| 精品国产一区二区三区2021| 精品一区二区三区四区五区| 麻豆国产欧美日韩综合精品二区| 欧美韩一区二区| 精品午夜视频| 日韩精品永久网址| 日本在线精品| 亚洲免费影院| 日韩精品一区二区三区中文在线 | 久久不卡国产精品一区二区| 国产乱码精品| 国产一区二区三区不卡av | 国产精品女主播一区二区三区| 久久国产精品亚洲77777| 免费成人性网站| 久久国产日韩欧美精品| 免费日韩成人| 国产a亚洲精品| 日本欧美不卡| 午夜欧美视频| 亚洲日产国产精品| 国产精品伊人| 成人精品中文字幕| 男女男精品视频网| 国产日韩在线观看视频| 国产一区2区| 欧美日韩第一| 日本在线一区二区三区| 免费在线欧美黄色| 99久久99视频只有精品| 美女久久一区| 国产福利一区二区精品秒拍| 国产在线观看www| 尤物在线精品| 日韩高清电影免费| 国产精品蜜芽在线观看| 蜜桃久久久久久| 精品理论电影在线| 欧美日韩精品一本二本三本 | 欧美一区成人| 激情黄产视频在线免费观看| 亚洲免费一区二区| 国产精品亚洲四区在线观看| 色综合五月天| 久久亚洲二区| 精品久久久网| 西西人体一区二区| 捆绑调教美女网站视频一区| 亚洲香蕉网站| 欧美日一区二区在线观看| 亚洲伦乱视频| 日韩激情啪啪| 136国产福利精品导航网址| 日本麻豆一区二区三区视频| 日韩在线二区|