日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

Java-Map从入门到性能分析3【LinkedHashMap(性能耗时对比、模拟LRU缓存)、TreeMap(排序、性能对比)】

發(fā)布時(shí)間:2024/9/30 java 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java-Map从入门到性能分析3【LinkedHashMap(性能耗时对比、模拟LRU缓存)、TreeMap(排序、性能对比)】 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

【視頻網(wǎng)址】:慕課網(wǎng)——Map從入門到性能分析

簡介:Map是開發(fā)中,使用頻率最高的知識點(diǎn)之一,Map家族也有很多成員,例如HashMap,LinkedMap等, 怎樣更好地使用Map家族的這些成員,速度效率怎么更好地得以發(fā)揮,我將自己的一些經(jīng)驗(yàn)與大家分享。


  • 筆記01🚀【第1、2章】
  • 筆記02🚀【第3章】
  • 筆記03🚀【第4、5、6章】

工程文件【鏈接:https://pan.baidu.com/s/1Vg3FLVtGeCCKZ3R68Xi2tA【提取碼:zjxs

目? ?錄

第4章 LinkedHashMap

4-1 LinkedHashMap性能耗時(shí)對比1(12:48)

4-2 LinkedHashMap性能耗時(shí)對比2(05:49)

4-3 LinkedHashMap模擬LRU緩存(17:28)

第5章 TreeMap

5-1 TreeMap實(shí)現(xiàn)升序或降序(07:51)

1、LinkedHashMap、TreeMap對比

2、升序排列(默認(rèn)情況)

3、降序排列(定義比較器)

4、案例代碼

5-2 TreeMap等進(jìn)行性能對比1(09:47)

5-3 TreeMap等進(jìn)行性能對比2(04:40)

第6章 課程總結(jié)

6-1 課程總結(jié)(05:32)


第4章 LinkedHashMap

4-1 LinkedHashMap性能耗時(shí)對比1(12:48)

HashMap的兄弟:共同實(shí)現(xiàn)了Map接口的實(shí)現(xiàn)類。

HashMap實(shí)現(xiàn)了Map接口;

LinkedHashMap(雙向鏈表形式,對HashMap進(jìn)行升級)繼承HashMap,也實(shí)現(xiàn)了Map接口。

LinkedHashMap錄入數(shù)據(jù),耗時(shí)比HashMap少!!! 【實(shí)驗(yàn)數(shù)據(jù):100萬條記錄。】

?

package com.imooc;import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map;/*** 1、分別給HashMap和LinkedHashMap以錄入1百萬數(shù)據(jù),并循環(huán)遍歷,觀察耗時(shí)* 2、都采用不帶參的空構(gòu)造方法*/ public class TestLinkedHashMap {public static void main(String[] args) {int count = 1000000;Map<String, String> map = new HashMap<String, String>();Map<String, String> linkedHashMap = new LinkedHashMap<String, String>();Long start, end;start = System.currentTimeMillis();for (int i = 0; i < count; i++) {map.put(String.valueOf(i), "value");}end = System.currentTimeMillis();System.out.println("map time: " + (end - start));start = System.currentTimeMillis();for (int i = 0; i < count; i++) {linkedHashMap.put(String.valueOf(i), "value");}end = System.currentTimeMillis();System.out.println("linkedHashMap time: " + (end - start));start = System.currentTimeMillis();for (String v : map.values()) {}end = System.currentTimeMillis();System.out.println("map time: " + (end - start));start = System.currentTimeMillis();for (String v : linkedHashMap.values()) {}end = System.currentTimeMillis();System.out.println("linkedHashMap time: " + (end - start));} }

4-2 LinkedHashMap性能耗時(shí)對比2(05:49)

500萬記錄!!!

1000萬條記錄!!!

4-3 LinkedHashMap模擬LRU緩存(17:28)

百度百科:https://baike.baidu.com/item/LRU/1269842?fr=aladdin

?

LRU是Least Recently Used的縮寫,即最近最少使用,是一種常用的頁面置換算法,選擇最近最久未使用的頁面予以淘汰。該算法賦予每個(gè)頁面一個(gè)訪問字段,用來記錄一個(gè)頁面自上次被訪問以來所經(jīng)歷的時(shí)間 t,當(dāng)須淘汰一個(gè)頁面時(shí),選擇現(xiàn)有頁面中其 t 值最大的,即最近最少使用的頁面予以淘汰。【LRU:緩存的計(jì)算方法。最近使用的保留;最早使用的清空!】

創(chuàng)建包!

創(chuàng)建類!

package com.imooc;import com.imooc.common.LRUMap; import com.sun.org.apache.bcel.internal.generic.NEW;import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map;/*** 1、分別給HashMap和LinkedHashMap以錄入1百萬數(shù)據(jù),并循環(huán)遍歷,觀察耗時(shí)* 2、都采用不帶參的空構(gòu)造方法*/ public class TestLinkedHashMap1 {public static void main(String[] args) {Map<String, String> linkedHashMap = new LinkedHashMap<String, String>();//雙向鏈表linkedHashMap.put("a", "1");linkedHashMap.put("b", "2");linkedHashMap.put("c", "3");linkedHashMap.put("d", "4");linkedHashMap.put("e", "5");linkedHashMap.get("c");System.out.println(linkedHashMap);//1、根據(jù)錄入順序進(jìn)行輸出//2、根據(jù)使用順序進(jìn)行輸出【accessOrder:輸出的順序-->采取使用順序】【使用過的鍵值對 排到最后】Map<String, String> linkedHashMap2 = new LinkedHashMap<String, String>(16, 0.75f, true);linkedHashMap2.put("a", "1");linkedHashMap2.put("b", "2");linkedHashMap2.put("c", "3");linkedHashMap2.put("d", "4");linkedHashMap2.put("e", "5");linkedHashMap2.get("c");linkedHashMap2.get("d");System.out.println(linkedHashMap2);Map<String, String> LRU = new LRUMap<String, String>(3);//緩存LRU中最多保存3條記錄LRU.put("x1", "00");LRU.put("x2", "00");LRU.put("x3", "00");LRU.get("x1");LRU.put("x4", "00");LRU.put("x5", "00");System.out.println(LRU);//只保留最近使用的3個(gè)} } package com.imooc.common;import java.util.LinkedHashMap; import java.util.Map;//<K, V>:K、V是通配符的效果。K、V可以換成String、Integer等,但不具有通配符效果! public class LRUMap<K, V> extends LinkedHashMap<K, V> {private int maxSize;//緩存中保存幾條記錄public LRUMap(int maxSize) {super(16, 0.75f, true);//按照最近使用的順序進(jìn)行輸出this.maxSize = maxSize;}//將父類方法按照自定義方式進(jìn)行重寫,滿足自身業(yè)務(wù)需要,把先錄入的(使用過的)刪除,只保留最近的內(nèi)容@Overrideprotected boolean removeEldestEntry(Map.Entry<K, V> eldest) { // return super.removeEldestEntry(eldest);//size()是LinkedHashMap的方法,返回LinkedHashMap的長度//如果長度大于當(dāng)前自定義輸入的最大長度,將刪除最老的數(shù)據(jù)(最近沒有使用的數(shù)據(jù))return size() > this.maxSize;} } /*public class LRUMap extends LinkedHashMap {private int maxSize;public LRUMap(int maxSize) {super(16, 0.75f, true);this.maxSize = maxSize;}@Overrideprotected boolean removeEldestEntry(Map.Entry eldest) { // return super.removeEldestEntry(eldest);return size() > this.maxSize;} }*/

??

第5章 TreeMap

5-1 TreeMap實(shí)現(xiàn)升序或降序(07:51)

1、LinkedHashMap、TreeMap對比

TreeMap、LinkedHashMap 都 有序?

LinkedHashMap:按照 輸入 或 訪問 順序,進(jìn)行顯示。

TreeMap:按 自然數(shù)的升序或降序,按照自然數(shù)大小進(jìn)行顯示。

2、升序排列(默認(rèn)情況)

3、降序排列(定義比較器)

降序排列,需要自定義比較器(Comparator),在Comparator中對比較方法[ compare() ]進(jìn)行定義。

{} --》內(nèi)部類的方式。加泛型:對 字符類型,進(jìn)行對比。

4、案例代碼

package com.imooc;import java.util.Comparator; import java.util.Map; import java.util.TreeMap;/*** 默認(rèn)是按key進(jìn)行升序排序;如果要按照降序,需要自定義比較器Comparator,* 在compare方法中進(jìn)行定義*/ public class TestTreeMap {public static void main(String[] args) {Map<String, String> treeMap = new TreeMap<String, String>(new Comparator<String>() {public int compare(String a, String b) {return b.compareTo(a);//a>b 返回 正數(shù); a==b 返回 0; a<b 返回負(fù)數(shù)}});treeMap.put("a", "123");treeMap.put("b", "123");treeMap.put("a", "123");treeMap.put("c", "123");treeMap.put("ab", "123");treeMap.put("eab", "123");treeMap.put("eb", "123");treeMap.put("eer", "123");treeMap.put("1", "123");treeMap.put("4", "123");treeMap.put("-1", "123");treeMap.put("2", "123");treeMap.put("9", "123");System.out.println(treeMap);//構(gòu)造器的定義,在構(gòu)造方法的()實(shí)現(xiàn)} }

5-2 TreeMap等進(jìn)行性能對比1(09:47)

通常是將數(shù)據(jù)庫中的數(shù)據(jù)取出來,經(jīng)過Map進(jìn)行轉(zhuǎn)存,用于其他地方。

一次性從數(shù)據(jù)庫中讀100萬條記錄的情況,并不多(極少)。

數(shù)據(jù)復(fù)雜化 --> 進(jìn)行測試!!!

package com.imooc;import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; import java.util.TreeMap;/*** 1、分別給HashMap和LinkedHashMap以錄入1百萬數(shù)據(jù),并循環(huán)遍歷,觀察耗時(shí)* 2、都采用不帶參的空構(gòu)造方法*/ public class TestLinkedHashMap {public static void main(String[] args) {int count = 10000000;Map<String, String> map = new HashMap<String, String>();Map<String, String> linkedHashMap = new LinkedHashMap<String, String>();Map<String, String> treeMap = new TreeMap<String, String>();Long start, end;start = System.currentTimeMillis();for (int i = 0; i < count; i++) {map.put(String.valueOf(i), "value");}end = System.currentTimeMillis();System.out.println("map time: " + (end - start));start = System.currentTimeMillis();for (int i = 0; i < count; i++) {linkedHashMap.put(String.valueOf(i), "value");}end = System.currentTimeMillis();System.out.println("linkedHashMap time: " + (end - start));start = System.currentTimeMillis();for (int i = 0; i < count; i++) {treeMap.put(String.valueOf(i), "value");}end = System.currentTimeMillis();System.out.println("treeMap time: " + (end - start));start = System.currentTimeMillis();for (String v : map.values()) {}end = System.currentTimeMillis();System.out.println("map time: " + (end - start));start = System.currentTimeMillis();for (String v : linkedHashMap.values()) {}end = System.currentTimeMillis();System.out.println("linkedHashMap time: " + (end - start));start = System.currentTimeMillis();for (String v : treeMap.values()) {}end = System.currentTimeMillis();System.out.println("treeMap time: " + (end - start));} }

5-3 TreeMap等進(jìn)行性能對比2(04:40)

Map必須按照錄入的順序:LinkedHashMap;

Map必須有序(升序、降序):TreeMap。

1000條記錄!!!

1萬條記錄!!!

10萬!!!

50萬!!!

第6章 課程總結(jié)

6-1 課程總結(jié)(05:32)

總結(jié)

以上是生活随笔為你收集整理的Java-Map从入门到性能分析3【LinkedHashMap(性能耗时对比、模拟LRU缓存)、TreeMap(排序、性能对比)】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。