1. 程式人生 > >轉 java8 hash優化

轉 java8 hash優化

HashMap是一個高效通用的資料結構,它在每一個Java程式中都隨處可見。先來介紹些基礎知識。你可能也知 道,HashMap使用key的hashCode()和equals()方法來將值劃分到不同的桶裡。桶的數量通常要比map中的記錄的數量要稍大,這樣 每個桶包括的值會比較少(最好是一個)。當通過key進行查詢時,我們可以在常數時間內迅速定位到某個桶(使用hashCode()對桶的數量進行取模) 以及要找的物件。

這些東西你應該都已經知道了。你可能還知道雜湊碰撞會對hashMap的效能帶來災難性的影響。如果多個hashCode()的值落到同一個桶內的 時候,這些值是儲存到一個連結串列中的。最壞的情況下,所有的key都對映到同一個桶中,這樣hashmap就退化成了一個連結串列——查詢時間從O(1)到 O(n)。我們先來測試下正常情況下hashmap在Java 7和Java 8中的表現。為了能完成控制hashCode()方法的行為,我們定義瞭如下的一個Key類:

Java
12345678910111213141516171819202122classKeyimplementsComparable<Key>{privatefinalintvalue;Key(intvalue){this.value=value;}@OverridepublicintcompareTo(Keyo){returnInteger.compare(this.value,o.value);}@Overridepublicbooleanequals(Objecto){if(this==o)returntrue;if(o==null
||getClass()!=o.getClass())returnfalse;Key key=(Key)o;returnvalue==key.value;}@OverridepublicinthashCode(){returnvalue;}}

Key類的實現中規中矩:它重寫了equals()方法並且提供了一個還算過得去的hashCode()方法。為了避免過度的GC,我將不可變的Key物件快取了起來,而不是每次都重新開始建立一遍:

Java
1 2 3 4 5 6 7 8 9 10 11 12 13 classKeyimplementsComparable<Key>{ publicclassKeys{ publicstaticfinalintMAX_KEY=10_000_000; privatestatic

相關推薦

java8 hash優化

HashMap是一個高效通用的資料結構,它在每一個Java程式中都隨處可見。先來介紹些基礎知識。你可能也知 道,HashMap使用key的hashCode()和equals()方法來將值劃分到不同的桶裡。桶的數量通常要比map中的記錄的數量要稍大,這樣 每個桶包括的值

java8 hash算法

throw 數字 計算 const += this key 轉換成 查找 一、hash算法   哈希算法將任意長度的二進制值映射為較短的固定長度的二進制值,這個小的二進制值稱為哈希值。哈希值是一段數據唯一且極其緊湊的數值表示形式。如果散列一段明文而且哪怕只更改該段落的一個字

】斜率優化DP和四邊形不等式優化DP整理

dex add ive mat 整理 off code 斜率dp 好的 當dp的狀態轉移方程dp[i]的狀態i需要從前面(0~i-1)個狀態找出最優子決策做轉移時 我們常常需要雙重循環 (一重循環跑狀態 i,一重循環跑 i 的所有子狀態)這樣的時間復雜度是O(N^2)而 斜

[] Webpack 打包優化之體積篇

使用 無奈 絲毫 utili -m n) 保存 影響 ast 談及如今欣欣向榮的前端圈,不僅有各類框架百花齊放,如Vue, React, Angular等等,就打包工具而言,發展也是如火如荼,百家爭鳴;從早期的王者Browserify, Grunt,到後來贏得寶座的 Gul

】Appium 優化

Appium 開源分享優化版 之前分享過PageObject+Python+Appium 本版本是對上次版本較大改版,主要解決了: 失敗重連一次(預設一次)可配置多次 基於appium1.7.1 uiautomator2 解決uiautomator2

XBurst基於MXU指令對YUYVRGB2的優化

YUV轉RGB的公式是固定的,YUV轉RGB的程式碼網上也可以找到很多,不過真的要將這些標準程式碼用在實際的專案中就會發現, 效能還是不夠好。 最近在君正的X1000 CPU上實現YUYV轉RGB24時, 為了不使用浮點計算,使用了下面的整數優化公式 B = y + ((443

Spark效能優化:資源調優篇

前言 在開發完Spark作業之後,就該為作業配置合適的資源了。Spark的資源引數,基本都可以在spark-submit命令中作為引數設定。很多Spark初學者,通常不知道該設定哪些必要的引數,以及如何設定這些引數,最後就只能胡亂設定,甚至壓根兒不設定。資源引數設定的不合理,可能會導致沒

()Java8 Lambda表示式教程-入門

1. 什麼是λ表示式 λ表示式本質上是一個匿名方法。讓我們來看下面這個例子:     public int add(int x, int y) {         return x + y;     } 轉成λ表示式後是這個樣子:         (int x, int y) -> x + y;

[]一致性hash演算法

via.http://blog.csdn.net/sparkliang/article/details/5279393一致性 hash 演算法( consistent hashing )張亮consistent hashing 演算法早在 1997 年就在論文 中被提出,目前在cache 系統中應用越來越廣泛

iOS介面跳的一些優化方案

App應用程式開發, 介面跳轉是基礎中的基礎, 幾乎沒有一個App是用不到介面跳轉的, 那麼怎麼樣去書寫介面跳轉程式碼才是比較合理的呢? 大家可能在想跳轉無非就2種方式, 能有什麼內容? 其實並不是這樣子的, 對於研發老手來說, 大型應用幾乎都是利用URLSc

[]Trie樹優化演算法:Double Array Trie 雙陣列Trie

Trie邏輯結構      Trie是一種常見的資料結夠,可以實現字首匹配(hash是不行的),而且對於詞典搜尋來說也是O(1)的時間複雜度,雖然比不上Hash,但是空間會省不少。       比如下圖表示了包含“pool, prize, preview, prepare,

】關於LIS和一類可以用樹狀數組優化的DP 預備知識

免費 關註 最長上升子序列 2.3 bzoj1264 一個數 long 個數字 等於 原文鏈接 http://www.cnblogs.com/liu-runda/p/6193690.html 預備知識     DP(Dynamic Programming)

MySQL索引原理及慢查詢優化

範圍 很難 等於 right 事件 原理 插入 jpg 個人網站 轉自:美團點評技術團隊http://tech.meituan.com/mysql-index.html MySQL憑借著出色的性能、低廉的成本、豐富的資源,已經成為絕大多數互聯網公司的首選關系型數據庫。雖然性

Nginx+Memcache+一致性hash算法 實現頁面分布式緩存(

tps ons efi 策略 可擴展性 master () list roo 網站響應速度優化包括集群架構中很多方面的瓶頸因素,這裏所說的將頁面靜態化、實現分布式高速緩存就是其中的一個很好的解決方案... 1)先來看看Nginx負載均衡 Nginx負載均衡依賴自帶的 ng

Golang 優化之路-空結構[]

提升 常用 span http get 參考文獻 處理 delet bool 寫在前面 開發 hashset 常用的套路: map[int]int8 map[int]bool 我們一般只用 map 的鍵來保存數據,值是沒有用的。所以來緩存集合數據會造成內存浪費。 空對象

】哈希(Hash)與加密(Encrypt)的基本原理、區別及工程應用

phy 理論 靈活運用 十分 實際應用 廣泛 tle 多網站 net 0、摘要 今天看到吉日嘎拉的一篇關於管理軟件中信息加密和安全的文章,感覺非常有實際意義。文中作者從實踐經驗出發,討論了信息管理軟件中如何通過哈希和加密進行數據保護。但是從文章評論中也可以

laravel性能優化技巧()

速度 memcached remember app 驅動器 ocs auth 運行 clear 說明 性能一直是 Laravel 框架為人詬病的一個點,所以調優 Laravel 程序算是一個必學的技能。 接下來分享一些開發的最佳實踐,還有調優技巧,大家有別的建議也歡迎留言討

lucene、lucene.NET詳細使用與優化詳解[]

構造 bitset 更多 隱患 .net wrapper 屬性設置 似的 擔心 1 lucene簡介1.1 什麽是luceneLucene是一個全文搜索框架,而不是應用產品。因此它並不像www.baidu.com 或者google Desktop那麽拿來就能用,它只是提供了

[] - Spark排錯與優化

sso nec org 發的 訓練 等待 8.4 刪除 pri Spark排錯與優化 http://blog.csdn.net/lsshlsw/article/details/49155087 一. 運維 1. Master掛掉,standby重啟也失效

erlang程序優化點的總結(

數據庫 機器 ria 嚴重 多線程 分別是 簡單 構造 代碼實現 註意,這裏只是給出一個總結,具體性能需要根據實際環境和需要來確定 霸爺指出,新的erlang虛擬機有很多調優啟動參數,今後現在這個方面深挖一下。 1. 進程標誌設置: 消息和binary內