滾雪球學Java(67):深入理解 TreeMap:Java 中的有序鍵值映射表

在這里插入圖片描述

??咦咦咦,各位小可愛,我是你們的好伙伴——bug菌,今天又來給大家普及Java SE相關知識點了,別躲起來啊,聽我講干貨還不快點贊,贊多了我就有動力講得更嗨啦!所以呀,養成先點贊后閱讀的好習慣,別被干貨淹沒了哦~

在這里插入圖片描述


🏆本文收錄于「滾雪球學Java」專欄,專業攻堅指數級提升,助你一臂之力,帶你早日登頂🚀,歡迎大家關注&&收藏!持續更新中,up!up!up!!

環境說明:Windows 10 + IntelliJ IDEA 2021.3.2 + Jdk 1.8

文章目錄

  • 前言
  • 摘要
  • TreeMap
    • 概述
    • 源代碼解析
    • 應用場景案例
    • 優缺點分析
      • 優點
      • 缺點
    • 類代碼方法介紹
      • 構造方法
      • 讀取方法
      • 寫入方法
      • 轉換方法
    • 測試用例
      • 測試用例
      • 測試結果
      • 測試代碼分析
      • 性能測試
        • 測試代碼演示
        • 測試結果
        • 測試代碼分析
    • 結論
  • 總結
    • 附錄源碼
  • ??建議/推薦你
  • 📣關于我

前言

??在 Java 編程中,我們經常需要使用到鍵值映射表這種數據結構。其中,HashMap 是最常用的一種,它能夠以 O(1) 的時間復雜度完成插入、查找、刪除等操作。但是,HashMap 并不能對鍵進行排序,因此如果我們需要按有序方式來保存鍵值對,就需要使用到 TreeMap了。

摘要

??本篇文章將深入介紹 TreeMap 的原理、源碼實現、應用場景、優缺點以及相關測試用例。

TreeMap

概述

??TreeMap 是一種基于紅黑樹實現的有序鍵值映射表。它實現了 Map 接口,并且根據鍵的自然排序或者根據一個 Comparator 進行排序。在 TreeMap 中,鍵值對是按照鍵進行排序的,因此遍歷 TreeMap 時得到的鍵值對是有序的。

源代碼解析

TreeMap 的主要實現類是 TreeMap 類。我們來看一下它的源碼實現。

public class TreeMap<K,V> extends AbstractMap<K,V>implements NavigableMap<K,V>, Cloneable, java.io.Serializable {// 省略了一些常量和字段的定義public TreeMap() {comparator = null;}public TreeMap(Comparator<? super K> comparator) {this.comparator = comparator;}// 省略了一些構造方法的定義public Set<Map.Entry<K,V>> entrySet() {return new EntrySet();}// 省略了一些方法的定義}

??從代碼中可以看出,TreeMap 實現了 Map 接口和 NavigableMap 接口,并且繼承了 AbstractMap。它也提供了多個構造方法,可以根據需要選擇。

??如下是部分源碼截圖:

在這里插入圖片描述

??下面我們來看一下 TreeMap 中最重要的實現類 Entry。Entry 類表示 TreeMap 中的一個鍵值對,它包含了鍵和值兩個屬性,其中鍵是有序的。

static final class Entry<K,V> implements Map.Entry<K,V> {K key;V value;Entry<K,V> left = null;Entry<K,V> right = null;Entry<K,V> parent;boolean color = BLACK;/*** Make a new cell with given key, value, and parent, and with* {@code null} child links, and BLACK color.*/Entry(K key, V value, Entry<K,V> parent) {this.key = key;this.value = value;this.parent = parent;}// 省略了一些方法的定義
}

??Entry 類中定義了一個 boolean 類型的 color 屬性,它表示該節點的顏色,用于紅黑樹的平衡操作。Entry 類中還包含了 left、right、parent 三個指針,用于指向該節點的左子節點、右子節點和父節點。

??如下是部分源碼截圖:

在這里插入圖片描述

應用場景案例

??以下是使用 TreeMap 的一個實際案例。我們有一個成績表,需要按照學生姓名的字典序進行排序,而 TreeMap 剛好可以滿足這個需求。

import java.util.*;public class ScoreTable {public static void main(String[] args) {TreeMap<String, Integer> map = new TreeMap<>();map.put("Tom", 85);map.put("Jack", 92);map.put("Lily", 76);for (Map.Entry<String, Integer> entry : map.entrySet()) {System.out.println(entry.getKey() + " : " + entry.getValue());}}
}

運行結果如下:

Jack : 92
Lily : 76
Tom : 85

??從運行結果可以看出,TreeMap 把學生姓名按照字典序排序后輸出。

優缺點分析

以下是 TreeMap 的優缺點分析。

優點

  1. TreeMap 可以對鍵進行排序,因此遍歷 TreeMap 時得到的鍵值對是有序的。
  2. TreeMap 可以根據自然順序或者自定義比較器進行排序。
  3. TreeMap 的內部實現使用紅黑樹,因此插入、查找、刪除等操作的時間復雜度為 O(log n)。

缺點

  1. TreeMap 要求鍵是可比較的,因此不能存儲自定義對象類型的鍵。
  2. TreeMap 的內部結構是紅黑樹,它比 HashMap 內部的哈希表結構要占用更多的內存,因此 TreeMap 的空間復雜度要高于 HashMap。
  3. 對于頻繁的插入、刪除操作,TreeMap 的效率不如 HashMap 高。

類代碼方法介紹

以下是 TreeMap 類中一些常用的方法的介紹。

構造方法

   // 構造一個空的 TreeMappublic TreeMap()// 構造一個 TreeMap,并指定一個比較器進行排序public TreeMap(Comparator<? super K> comparator)

代碼拓展

??這段代碼是 Java 中 TreeMap 類的構造函數,用于創建 TreeMap 對象。

??第一個構造函數 public TreeMap() 創建一個空的 TreeMap,沒有指定任何比較器,默認使用自然排序(即實現 Comparable 接口)。

??第二個構造函數 public TreeMap(Comparator<? super K> comparator) 創建一個 TreeMap 對象,并指定一個特定的比較器來對鍵進行排序。Comparator 參數是用于比較鍵的比較器,它可以是任何實現了 Comparator 接口的類或者 lambda 表達式。通過這個構造函數,我們可以根據自己的需要自定義排序規則。

??注意,TreeMap 的鍵必須實現 Comparable 接口或者在創建 TreeMap 時指定一個 Comparator 比較器,否則會拋出 ClassCastException 異常。

讀取方法

   // 獲取 TreeMap 的大小public int size()// 判斷 TreeMap 是否為空public boolean isEmpty()// 獲取 TreeMap 中鍵為 key 對應的值public V get(Object key)// 獲取 TreeMap 中比鍵 key 大的最小鍵值對public Map.Entry<K,V> higherEntry(K key)// 獲取 TreeMap 中比鍵 key 大的最小鍵public K higherKey(K key)// 獲取 TreeMap 中比鍵 key 小的最大鍵值對public Map.Entry<K,V> lowerEntry(K key)// 獲取 TreeMap 中比鍵 key 小的最大鍵public K lowerKey(K key)// 獲取 TreeMap 中鍵值比 key 大的最小鍵值對,如果 TreeMap 為空則返回 nullpublic Map.Entry<K,V> ceilingEntry(K key)// 獲取 TreeMap 中鍵值比 key 大的最小鍵,如果 TreeMap 為空則返回 nullpublic K ceilingKey(K key)// 獲取 TreeMap 中鍵值比 key 小的最大鍵值對,如果 TreeMap 為空則返回 nullpublic Map.Entry<K,V> floorEntry(K key)// 獲取 TreeMap 中鍵值比 key 小的最大鍵,如果 TreeMap 為空則返回 nullpublic K floorKey(K key)// 獲取 TreeMap 中最小的鍵值對public Map.Entry<K,V> firstEntry()// 獲取 TreeMap 中最小的鍵public K firstKey()// 獲取 TreeMap 中最大的鍵值對public Map.Entry<K,V> lastEntry()// 獲取 TreeMap 中最大的鍵public K lastKey()

代碼拓展

??這段代碼是 TreeMap 類中的一些常用方法,具體說明如下:

  • size():返回 TreeMap 的大小(即鍵值對個數)。
  • isEmpty():判斷 TreeMap 是否為空,如果為空則返回 true,否則返回 false。
  • get(key):返回鍵為 key 對應的值,如果 key 不存在則返回 null。
  • higherEntry(key):返回 TreeMap 中比鍵 key 大的最小鍵值對,如果不存在則返回 null。
  • higherKey(key):返回 TreeMap 中比鍵 key 大的最小鍵,如果不存在則返回 null。
  • lowerEntry(key):返回 TreeMap 中比鍵 key 小的最大鍵值對,如果不存在則返回 null。
  • lowerKey(key):返回 TreeMap 中比鍵 key 小的最大鍵,如果不存在則返回 null。
  • ceilingEntry(key):返回 TreeMap 中鍵值比 key 大的最小鍵值對,如果 TreeMap 為空則返回 null。
  • ceilingKey(key):返回 TreeMap 中鍵值比 key 大的最小鍵,如果 TreeMap 為空則返回 null。
  • floorEntry(key):返回 TreeMap 中鍵值比 key 小的最大鍵值對,如果 TreeMap 為空則返回 null。
  • floorKey(key):返回 TreeMap 中鍵值比 key 小的最大鍵,如果 TreeMap 為空則返回 null。
  • firstEntry():返回 TreeMap 中最小的鍵值對,如果 TreeMap 為空則返回 null。
  • firstKey():返回 TreeMap 中最小的鍵,如果 TreeMap 為空則拋出 NoSuchElementException 異常。
  • lastEntry():返回 TreeMap 中最大的鍵值對,如果 TreeMap 為空則返回 null。
  • lastKey():返回 TreeMap 中最大的鍵,如果 TreeMap 為空則拋出 NoSuchElementException 異常。

??這些方法可以幫助我們操作 TreeMap 中的鍵值對,常用于查詢和遍歷操作。

寫入方法

   // 插入鍵值對public V put(K key, V value)// 刪除鍵值對public V remove(Object key)// 清空 TreeMappublic void clear()

代碼拓展

??這是針對 Java 中的 TreeMap 類進行的方法分析:

  1. put(K key, V value): 該方法用于將指定的鍵值對插入到 TreeMap 中。如果 TreeMap 中已經有該鍵,則用新的值替換舊的值,并返回舊的值;如果 TreeMap 中沒有該鍵,則插入該鍵值對,并返回 null。

  2. remove(Object key): 該方法用于從 TreeMap 中刪除指定的鍵及其對應的值。如果 TreeMap 中有該鍵,則刪除該鍵值對,并返回其對應的值;如果 TreeMap 中沒有該鍵,則返回 null。

  3. clear(): 該方法用于清空 TreeMap 中的所有鍵值對。調用該方法后,TreeMap 的大小變為 0,但 TreeMap 仍然存在。

轉換方法

   // 返回 TreeMap 的副本public Object clone()// 返回 TreeMap 中鍵的有序集合public Set<K> keySet()// 返回 TreeMap 中鍵值對的集合public Set<Map.Entry<K, V>> entrySet()// 返回 TreeMap 中值的無序集合public Collection<V> values()

代碼拓展

??這段代碼是 Java 中 TreeMap 類的幾個常用方法的聲明,具體解釋如下:

  1. public Object clone() 方法會返回一個 TreeMap 的副本,也就是一個新的 TreeMap,其中包含與原始 TreeMap 相同的鍵值對。這個方法可以用來創建原始 TreeMap 的副本,以在對副本進行操作時不影響原始 TreeMap。

  2. public Set<K> keySet() 方法會返回 TreeMap 中所有鍵的有序集合。該方法可以用于遍歷 TreeMap 中的所有鍵。

  3. public Set<Map.Entry<K, V>> entrySet() 方法會返回 TreeMap 中所有鍵值對的集合。集合中每個元素都是一個 Map.Entry 對象,包含鍵和相應的值。該方法可以用于遍歷 TreeMap 中的所有鍵值對。

  4. public Collection<V> values() 方法會返回 TreeMap 中所有值的無序集合。該方法可以用于遍歷 TreeMap 中的所有值。

??需要注意的是,TreeMap 的鍵必須是可比較的對象,并且按照鍵的自然順序進行排序。如果要使用自定義比較器對鍵進行排序,可以使用 TreeMap 的另一個構造函數,該構造函數接受一個實現了 Comparator 接口的比較器對象作為參數。

測試用例

以下是針對 TreeMap 的測試用例。

測試用例

測試 TreeMap 的基本操作,包括插入、刪除和遍歷。

package com.demo.javase.day67;import java.util.Map;
import java.util.TreeMap;/*** @Author bug菌* @Date 2023-11-06 12:10*/
public class TreeMapTest {public static void main(String[] args) {TreeMap<String, Integer> map = new TreeMap<>();map.put("Tom", 85);map.put("Jack", 92);map.put("Lily", 76);map.put("Bob", 88);System.out.println("Initial TreeMap:");for (Map.Entry<String, Integer> entry : map.entrySet()) {System.out.println(entry.getKey() + " : " + entry.getValue());}map.remove("Lily");System.out.println("\nAfter removing Lily:");for (Map.Entry<String, Integer> entry : map.entrySet()) {System.out.println(entry.getKey() + " : " + entry.getValue());}}
}

測試結果

??根據如上測試用例,本地測試結果如下,僅供參考,你們也可以自行修改測試用例或者添加更多的測試數據或測試方法,進行熟練學習以此加深理解。

運行結果如下:

Initial TreeMap:
Jack : 92
Lily : 76
Bob : 88
Tom : 85After removing Lily:
Bob : 88
Jack : 92
Tom : 85

具體執行截圖如下:

在這里插入圖片描述

測試代碼分析

??根據如上測試用例,在此我給大家進行深入詳細的解讀一下測試代碼,以便于更多的同學能夠理解并加深印象。

??此代碼是一個簡單的關于 TreeMap 的使用示例。 TreeMap 是基于紅黑樹實現的,可以保證有序性,且插入、刪除、查找的時間復雜度是 O(log n)。

??該代碼創建了一個 TreeMap 對象,鍵類型為 String,值類型為 Integer。然后向 TreeMap 中添加了四個鍵值對。接著打印出初始 TreeMap 中的所有鍵值對。再移除 key 為 “Lily” 的鍵值對,最后再次打印出移除后的 TreeMap 中的所有鍵值對。

運行結果如下:

Initial TreeMap:
Jack : 92
Lily : 76
Bob : 88
Tom : 85

After removing Lily:
Bob : 88
Jack : 92
Tom : 85

??可以看到,初始 TreeMap 中所有鍵值對的順序是按照鍵的自然順序進行排序的(即按照字母順序)。而移除 key 為 “Lily” 的鍵值對后,再次打印出的所有鍵值對的順序仍然是有序的。這證明 TreeMap 確實有序,且移除操作也能保持 TreeMap 的順序性。

性能測試

測試 TreeMap 的性能,包括插入、查找和刪除操作的時間消耗。

測試代碼演示
package com.demo.javase.day67;import java.util.TreeMap;/*** @Author bug菌* @Date 2023-11-06 12:12*/
public class TreeMapPerformanceTest {private static final int SIZE = 1000000;public static void main(String[] args) {System.out.println("TreeMap Performance Test:");System.out.println("-------------------------");TreeMap<Integer, Integer> map = new TreeMap<>();// Insert testlong start = System.currentTimeMillis();for (int i = 0; i < SIZE; i++) {map.put(i, i);}long end = System.currentTimeMillis();System.out.println("Insert " + SIZE + " elements time: " + (end - start) + "ms");// Search teststart = System.currentTimeMillis();for (int i = 0; i < SIZE; i++) {map.get(i);}end = System.currentTimeMillis();System.out.println("Search " + SIZE + " elements time: " + (end - start) + "ms");// Delete teststart = System.currentTimeMillis();for (int i = 0; i < SIZE; i++) {map.remove(i);}end = System.currentTimeMillis();System.out.println("Delete " + SIZE + " elements time: " + (end - start) + "ms");}
}
測試結果

??根據如上測試用例,本地測試結果如下,僅供參考,你們也可以自行修改測試用例或者添加更多的測試數據或測試方法,進行熟練學習以此加深理解。

運行結果如下:

TreeMap Performance Test:
-------------------------
Insert 1000000 elements time: 148ms
Search 1000000 elements time: 64ms
Delete 1000000 elements time: 65ms

在這里插入圖片描述

測試代碼分析

??根據如上測試用例,在此我給大家進行深入詳細的解讀一下測試代碼,以便于更多的同學能夠理解并加深印象。

??這是一個測試TreeMap性能的Java程序,主要進行了三項測試:

  1. 插入測試:向TreeMap中插入1000000個元素,并記錄時間;
  2. 查找測試:在TreeMap中查找1000000個元素,并記錄時間;
  3. 刪除測試:從TreeMap中刪除1000000個元素,并記錄時間。

??通過這些測試,可以評估TreeMap在插入、查找和刪除操作時的性能。

結論

??本文對 Java 中的有序鍵值映射表 TreeMap 進行了詳細的介紹。我們講解了 TreeMap 的原理、源碼實現、應用場景、優缺點以及相關測試用例。通過本文的學習,我們能夠更加深入地理解 TreeMap,以及在實際開發中如何正確地使用它。

總結

??本篇文章主要介紹了 Java 中的有序鍵值映射表 TreeMap,包括其原理、源碼實現、應用場景、優缺點以及相關測試用例。從文章中可以了解到,TreeMap 是一種基于紅黑樹實現的有序鍵值映射表,可以根據鍵進行排序,遍歷 TreeMap 時得到的鍵值對是有序的。同時,TreeMap 的內部實現使用紅黑樹,因此插入、查找、刪除等操作的時間復雜度為 O(log n)。文章還提供了針對 TreeMap 的測試用例,對其進行性能測試,以評估 TreeMap 在插入、查找和刪除操作時的性能。

??…
??好啦,這期的內容就基本接近尾聲啦,若你想學習更多,可以參考這篇專欄總結《「滾雪球學Java」教程導航帖》,本專欄致力打造最硬核 Java 零基礎系列學習內容,🚀打造全網精品硬核專欄,帶你直線超車;歡迎大家訂閱持續學習。

附錄源碼

??如上涉及所有源碼均已上傳同步在「Gitee」,提供給同學們一對一參考學習,輔助你更迅速的掌握。

??建議/推薦你


??無論你是計算機專業的學生,還是對編程有興趣的小伙伴,都建議直接毫無顧忌的學習此專欄「滾雪球學Java」,bug菌鄭重承諾,凡是學習此專欄的同學,均能獲取到所需的知識和技能,全網最快速入門Java編程,就像滾雪球一樣,越滾越大,指數級提升。

??最后,如果這篇文章對你有所幫助,幫忙給作者來個一鍵三連,關注、點贊、收藏,您的支持就是我堅持寫作最大的動力。

??同時歡迎大家關注公眾號:「猿圈奇妙屋」 ,以便學習更多同類型的技術文章,免費白嫖最新BAT互聯網公司面試題、4000G pdf電子書籍、簡歷模板、技術文章Markdown文檔等海量資料。

📣關于我

??我是bug菌,CSDN | 掘金 | infoQ | 51CTO 等社區博客專家,歷屆博客之星Top30,掘金年度人氣作者Top40,51CTO年度博主Top12,華為云 | 阿里云| 騰訊云等社區優質創作者,全網粉絲合計15w+ ;硬核微信公眾號「猿圈奇妙屋」,歡迎你的加入!免費白嫖最新BAT互聯網公司面試題、4000G pdf電子書籍、簡歷模板等海量資料。


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/696850.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/696850.shtml
英文地址,請注明出處:http://en.pswp.cn/news/696850.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

機器人內部傳感器閱讀筆記及心得-位置傳感器-旋轉變壓器、激光干涉式編碼器

旋轉變壓器 旋轉變壓器是一種輸出電壓隨轉角變化的檢測裝置&#xff0c;是用來檢測角位移的&#xff0c;其基本結構與交流繞線式異步電動機相似&#xff0c;由定子和轉子組成。 旋轉變壓器的原理如圖1所示&#xff0c;定子相當于變壓器的一次側&#xff0c;有兩組在空間位置上…

MyBatis-Plus 優雅實現數據加密存儲

文章目錄 前言一、數據庫字段加解密實現1. 定義加密類型枚舉2. 定義AES密鑰和偏移量3. 配置定義使用的加密類型4. 加密解密接口5. 解密解密異常類6. 加密解密實現類6.1 AES加密解密實現類6.2 Base64加密解密實現類 7. 實現數據庫的字段保存加密與查詢解密處理類8. MybatisPlus配…

使用python進行量化交易

yfinance yfinance國內不能使用&#xff0c;可以使用tushare、akshare代替 import yfinance as yf# 輸入股票代碼 stock_symbol AAPL # 替換為你想要查詢的股票代碼# 獲取股票數據 data yf.download(stock_symbol)# 打印實時數據 print(data)pip install akshare import …

Selenium安裝與配置

文章目錄 一、selenium安裝1. Python環境準備&#xff1a;2. 安裝Selenium&#xff1a;3. 瀏覽器驅動安裝&#xff1a;4. 驗證安裝&#xff1a; 二、常見問題1. Selenium版本與瀏覽器驅動程序不兼容&#xff1a;2. 瀏覽器驅動程序路徑未正確設置&#xff1a; Selenium是一個用于…

2024年1月手機市場行業分析:蘋果手機份額驟降,國產高端手機成功逆襲!

小米Ultra發布。 一方面&#xff0c;我們有望看到國產手機再一次超越自己的決心&#xff0c;繼續創新追逐高端&#xff1b;另一方面&#xff0c;我們也不得不正視目前手機市場所面臨的危機狀態。 2024年1月的線上手機市場遠不如去年。根據鯨參謀數據顯示&#xff0c;今年1月京…

Qt(C++)面試題 | 精選25項常問

面試是每個求職者都必須經歷的一關,而QT面試更是需要面試者有深厚的編程基礎和豐富的實戰經驗。下面我們為大家整理了25道QT面試題,希望能夠幫助大家在求職路上獲得成功。 ?Qt 中常用的五大模塊是哪些? Qt 中常用的五大模塊包括: QtCore:提供了 Qt 的核心功能,例如基本的…

Java面試題之分布式/微服務篇

經濟依舊不景氣啊&#xff0c;如此大環境下Java還是這么卷&#xff0c;又是一年一次的金三銀四。 兄弟們&#xff0c;你準備好了嗎&#xff1f;沖沖沖&#xff01;歐里給&#xff01; 分布式/微服務相關面試題解 題一&#xff1a;CAP理論&#xff0c;BASE理論題二&#xff1a;…

深度神經網絡

包括&#xff1a;深度前饋神經網絡、深度卷積神經網絡、深度循環神經網絡 深度神經網絡全面概述&#xff1a;從基本概念到實際模型和硬件基礎-騰訊云開發者社區-騰訊云

MQL語言實現JSON協議庫

文章目錄 一、MQL語言實現JSON協議的意義二、定義JSON數據枚舉類型簡單數據類型復雜數據類型枚舉數據類型定義類變量清理與賦值方法構造與析構方法重載運算符添加與設置方法序列化與反序列方法 一、MQL語言實現JSON協議的意義 數據交互&#xff1a;JSON是一種輕量級的數據交換格…

【2024軟件測試面試必會技能】Postman(1): postman的介紹和安裝

Postman的介紹 Postman 是一款谷歌開發的接口測試工具,使API的調試與測試更加便捷。 它提供功能強大的 Web API & HTTP 請求調試。它能夠發送任何類型的HTTP 請求 (GET, HEAD, POST, PUT..)&#xff0c;附帶任何數量的參數 headers。 postman是一款支持http協議的接口調試…

【PTA|函數題|期末復習】指針

目錄 6-1 計算兩數的和與差&#xff08;5分&#xff09; 函數接口定義&#xff1a; 裁判測試程序樣例&#xff1a; 輸入樣例&#xff1a; 輸出樣例&#xff1a; 代碼 6-2 拆分實數的整數與小數部分 (5分) 函數接口定義&#xff1a; 裁判測試程序樣例&#xff1a; 輸入…

springboot整合mybatisPlus超級詳細

springboot整合mybatis-plus超級詳細 一、環境二、springboot整合myBatisPlus2.1新建2.2 添加Mybatis-plus和mysql依賴2.3 修改配置文件2.4 新建包和文件2.5 新建表2.6 創建實體類2.7 創建Mapper接口2.8 創建Service接口2.9 創建Service實現類2.10 增刪改查 MyBatis-Plus&#…

C# Onnx 使用onnxruntime部署實時視頻幀插值

目錄 介紹 效果 模型信息 項目 代碼 下載 C# Onnx 使用onnxruntime部署實時視頻幀插值 介紹 github地址&#xff1a;https://github.com/google-research/frame-interpolation FILM: Frame Interpolation for Large Motion, In ECCV 2022. The official Tensorflow 2…

四.QT5工具安裝和環境變量的配置

1.以管理員身份運行安裝包 2.登錄qt賬號&#xff0c;點擊【next】 3.選中同意 4.選擇安裝目錄&#xff0c;注意不能有中文和空格 5.勾選 64位 mingw。點擊【next】&#xff0c;等待安裝完成 6.配置環境變量

[07] 組件注冊

目錄 Vue.js 組件局部注冊全局注冊 Vue.js 組件 組件&#xff08;Component&#xff09;是 Vue.js 最強大的功能之一。 組件可以擴展 HTML 元素&#xff0c;封裝可重用的代碼。 組件系統讓我們可以用獨立可復用的小組件來構建大型應用&#xff0c;幾乎任意類型的應用的界面都…

為什么很多人選用QT開發,有哪些應用實例?

在軟件開發領域&#xff0c;Qt框架作為一種跨平臺的C應用程序開發框架&#xff0c;近年來受到越來越多開發者的青睞。這主要得益于其卓越的跨平臺性能、豐富的功能庫、開發效率以及社區支持。以下將通過詳實的分析&#xff0c;從不同角度探討為什么很多人改用QT開發&#xff0c…

低代碼開發:學校低成本數字化轉型的新引擎

隨著科技的飛速發展&#xff0c;數字化轉型已經成為教育行業的一大趨勢。然而&#xff0c;對于許多學校來說&#xff0c;高昂的數字化改造成本成為了一道難以逾越的門檻。本文將探討如何通過低代碼開發&#xff0c;以低成本實現學校數字化轉型&#xff0c;為教育行業注入新活力…

力扣熱題100_子串_560_和為 K 的子數組

文章目錄 題目鏈接解題思路解題代碼 題目鏈接 560.和為 K 的子數組 解題思路 1.定義變量count&#xff08;計算個數&#xff0c;返回值&#xff09;為0、n&#xff08;當前nums長度&#xff09;、preSums&#xff08;利用利用defaultdict的特性&#xff0c;當presum-k不存在…

list.stream().forEach()和list.forEach()的區別

list.stream().forEach() 和 list.forEach() 在 Java 中都是用于遍歷集合元素的方法&#xff0c;但它們在使用場景和功能上有所不同&#xff1a; list.forEach()&#xff1a; 是從 Java 8 開始引入到 java.util.List 接口的標準方法。直接對列表進行迭代&#xff0c;它采用內部…

力扣645. 錯誤的集合(排序,哈希表)

Problem: 645. 錯誤的集合 文章目錄 題目描述思路復雜度Code 題目描述 思路 1.排序 1.對nums數組按從小到大的順序排序; 2.遍歷數組時若判斷兩個相鄰的元素則找到重復元素&#xff1b; 3.記錄一個整形變量prev一次置換當前位置元素并與其作差&#xff0c;若差等于2著說明缺失的…