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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java-Map从入门到性能分析1【Map初识、Map通用方法、HashMap的使用(遍历方法、性能分析)】

發布時間:2024/9/30 java 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java-Map从入门到性能分析1【Map初识、Map通用方法、HashMap的使用(遍历方法、性能分析)】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【視頻網址】:慕課網——Map從入門到性能分析

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


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

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

目? ?錄

第1章 Map初識

1-1 Map初識(07:00)

1、可以學到什么?

2、課程目標

3、課程安排

4、編譯器idea使用

1-2 Map通用方法(03:37)

1、Map接口及其實現類

2、Map接口通用方法

第2章 HashMap的使用

2-1 HashMap基本用法(08:42)

1、HashMap的構造方法

2、HashMap的基本用法

3、創建HashMap對象

2-2 HashMap的Entry結構(05:29)

2-3 HashMap例題1(06:10)

2-4 HashMap遍歷-keySet(06:09)

2-5 HashMap遍歷-values(02:57)

2-6 HashMap遍歷-entrySet(04:34)

2-7 HashMap遍歷-lterator(04:44)

2-8 HashMap遍歷性能分析1(08:00)

2-9?HashMap遍歷性能分析2(06:17)

2-10?HashMap遍歷性能分析3(03:56)

1、?50萬條記錄!!!

2、100萬條記錄!!!

3、500萬條記錄!!!

4、1000萬條記錄!!!

代碼匯總


第1章 Map初識

1-1 Map初識(07:00)

1、可以學到什么?

2、課程目標

遍歷Map的方法有很多。哪種方法最合適、效率最高--->對比:性能分析===》合適的遍歷

對Map進行優化--->需要知道底層原理

3、課程安排

有參構造方法、無參構造方法

4、編譯器idea使用

jdk版本:1.8及以上!!!

創建項目

創建包

創建類

測試

下節課的課程安排!!!

1-2 Map通用方法(03:37)

1、Map接口及其實現類

Map是接口;HashMap、LinkedHashMap、TreeMap是3個實現類;

如箭頭所示方向:下一級(LinkedHashMap)可以使用上一級(HashMap)的方法。?

LinkedHashMap可以使用HashMap的方法,HashMap可以使用Map的方法。

方法的重寫、覆蓋===》方法功能變化!!!

2、Map接口通用方法

存---put(鍵值對)、取---get()

k是標識---進行存取

containsKey():判斷key是否存在。

  • 往往與put()組合使用?!臼褂胮ut()存value,可使用containsKey()判斷key是否存在!】
  • 用于查找Map中是否存在指定的kay-value。
  • 第2章 HashMap的使用

    2-1 HashMap基本用法(08:42)

    1、HashMap的構造方法

    根據 不同場景,選擇 不同的構造方法 !!!

    參數位置:根據不同場景、不同場合 計算得到!!!

    2、HashMap的基本用法

    設計啥類型,就?預先?指定啥類型。

    3、創建HashMap對象

    package com.imooc;import java.util.HashMap; import java.util.Map;public class TestMap {public static void main(String[] args) { // System.out.println("加油~~~");Map one = new HashMap();//使用無參構造方法 創建 userMapMap<String, Integer> userMap = new HashMap<String, Integer>();userMap.put("zhangsan1", 110);userMap.put("zhangsan2", 120);userMap.put("zhangsan3", 130);Integer n = userMap.get("zhangsan2");System.out.println(n + "====");} }

    2-2 HashMap的Entry結構(05:29)

    源碼解析(Entry結構)? ?? ?4個變量(key、value、next、hash)? ? ? [ 鍵值映射、鍵值對、節點 ]

    實際上:用put() 存儲 鍵值映射,其實就是增加Entry?!疽粋€鍵值映射 ---> 1個Entry對象】【存的是Entry、取的也是Entry】

    不需要人工干預、人工操作Entry。內置方法 put()、get()自動往Entry中存取!方法的內部實際上是在調用Entry。

    put()==》實際上是完成了4個變量(key、value、next、hash)的賦值工作!

    next:下一個,Entry類型-->下一個Entry==》通過next找下一個Entry(鍵值映射)

    hash:決定對next的哪個位置進行操作!

    2-3 HashMap例題1(06:10)

    根據 取值 與 hash 決定 輸出順序!

    2-4 HashMap遍歷-keySet(06:09)

    2-5 HashMap遍歷-values(02:57)

    只能獲取map的value!!!

    2-6 HashMap遍歷-entrySet(04:34)

    2-7 HashMap遍歷-lterator(04:44)

    迭代器

    加泛型,做數據類型的限定!【通過 map 獲取 entrySet(),再 轉換成 迭代器?!?/strong>

    it.hasNext() :判斷迭代器是否還有下一個。

    while()成立--->用 “ it.next() ” 取值(怎么存,怎么取!),將其轉化為entry,通過 entry.getKey()、entry.getValues() 進行取值!

    ?

    2-8 HashMap遍歷性能分析1(08:00)

    實驗環境搭建:十萬條記錄-->進行測試!key越復雜,越接近真實環境,實驗效果越真實!

    2-9?HashMap遍歷性能分析2(06:17)

    相同條件下,進行測試!!!同樣操作,同樣目的,進行測試!!!

    盡量避免使用keySet()。多使用Iterator、values!?

    10萬條記錄!!!

    2-10?HashMap遍歷性能分析3(03:56)

    計算機運行,CPU資源隨機分配,由計算機系統自己進行調整!每次運行,有差異,在一定范圍內求性能比。

    1、?50萬條記錄!!!

    2、100萬條記錄!!!

    3、500萬條記錄!!!

    4、1000萬條記錄!!!

    代碼匯總

    package com.imooc;import java.util.HashMap; import java.util.Iterator; import java.util.Map;public class TestMap {public static void main(String[] args) {//System.out.println("加油~~~");Map one = new HashMap();//Integer n = userMap.get("zhangsan2");//System.out.println(n + "====");//System.out.println(userMap);Map map1 = inputMap();System.out.println(map1);System.out.println("-------------------------------");showMap1(map1);System.out.println("-------------------------------");showMap2(map1);System.out.println("-------------------------------");showMap3(map1);System.out.println("-------------------------------");showMap4(map1);}// 初始化Mappublic static Map inputMap() {//使用無參構造方法 創建 userMapMap<String, Integer> userMap = new HashMap<String, Integer>(); // userMap.put("zhangsan1", 110); // userMap.put("zhangsan2", 120); // userMap.put("zhangsan3", 130); // userMap.put("zhangsan4", 140); // userMap.put("zhangsan5", 150);String str[] = new String[]{"a", "b", "c", "d", "e", "f", "g", "h", "i", "j"};String key;Integer value;for (int i = 0; i < 10000000; i++) {//十萬的數據量--做性能分析int m = (int) (Math.random() * 10); // [0~9]//key = "x" + i;key = String.valueOf(str[m] + i * 100);//轉換為字符類型value = i;//存儲的時候,主要以key作為依據!!!userMap.put(key, value);}return userMap;}/*** 1、利用keySet()遍歷Map* 好處:可以獲取到key本身、key代表的value** @param userMap*/public static void showMap1(Map<String, Integer> userMap) {//Map形參需要加上泛型Long start = System.currentTimeMillis();//map.keySet():從map對象中獲取key。循環1次,獲取1個key,存到冒號左邊的key變量中Integer value;for (String key : userMap.keySet()) { // System.out.println(key + "***" + userMap.get(key));value = userMap.get(key);}Long end = System.currentTimeMillis();System.out.println("1、keySet:" + (end - start));}/**** 2、利用values遍歷Map* @param userMap*/public static void showMap2(Map<String, Integer> userMap) {Long start = System.currentTimeMillis();//記錄消耗時間---獲取當前系統毫秒數Integer value;for (Integer v : userMap.values()) { // System.out.println(v + "===");value = v;}Long end = System.currentTimeMillis();//記錄消耗時間---獲取當前系統毫秒數System.out.println("2、values:" + (end - start));}/**** 3、利用entrySet()遍歷Map* @param userMap*/public static void showMap3(Map<String, Integer> userMap) {Long start = System.currentTimeMillis();//Map.Entry<String, Integer>類型的變量//一次性全部獲取key、value【entrySet()更快】【keySet()獲取value需要使用get()進行獲取】Integer value;for (Map.Entry<String, Integer> entry : userMap.entrySet()) { // System.out.println(entry); // System.out.println(entry.getKey() + "===" + entry.getValue());value = entry.getValue();}Long end = System.currentTimeMillis();System.out.println("3、entrySet:" + (end - start));}/**** 4、利用Iterator遍歷Map* @param userMap*/public static void showMap4(Map<String, Integer> userMap) {Long start = System.currentTimeMillis();Iterator<Map.Entry<String, Integer>> it = userMap.entrySet().iterator();Integer value;while (it.hasNext()) {Map.Entry<String, Integer> entry = it.next(); // System.out.println(entry.getKey() + "===" + entry.getValue());value = entry.getValue();}Long end = System.currentTimeMillis();System.out.println("4、Iterator:" + (end - start));}}

    ?希望對您有所幫助~~~

    總結

    以上是生活随笔為你收集整理的Java-Map从入门到性能分析1【Map初识、Map通用方法、HashMap的使用(遍历方法、性能分析)】的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。