【java 13天進階Day04】常用API、正則表達式,泛型、Collection集合API

Math類的使用。

  • Math用于做數學運算。
  • Math類中的方法全部是靜態方法,直接用類名調用即可。
  • 方法:
    1. public static int abs(int a) 獲取參數a的絕對值
    2. public static double ceil(double a) 向上取整
    3. public static double floor(double a) 向下取整
    4. public static double pow(double a, double b) 獲取a的b次冪
    5. public static long round(double a) 四舍五入取整

System系統類

  • System代表當前系統。
  • 靜態方法:
    • 1.public static void exit(int status):終止JVM虛擬機,非0是異常終止。
    • 2.public static long currentTimeMillis():獲取當前系統此刻時間毫秒值。
    • 3.可以做數組的拷貝。
    • arraycopy(Object var0, int var1, Object var2, int var3, int var4);
      • 使用:參數一:原數組;參數二:從原數組的哪個位置開始賦;參數三:目標數組;參數四:賦值到目標數組的哪個位置;參數五:賦值幾個。

BigDecimal大數據類

  • 浮點型運算的時候直接+ * /可能會出現數據失真(精度問題)。
  • BigDecimal以解決浮點型運算數據失真的問題。
  • BigDicimal類:
    • 包:java.math.
    • 創建對象的方式(最好的方式:)public static BigDecimal valueOf(double val) :包裝浮點數成為大數據對象。
      • 使用:double a = 0.1;
      • BigDecimal a1 = BigDecimal.valueOf(a);
      • double rs = a1.doubleValue();
    • BigDecimal只是解決精度問題的手段,double數據才是我們的目的
    • 方法聲明
      1. public BigDecimal add(BigDecimal value) 加法運算
      2. public BigDecimal subtract(BigDecimal value) 減法運算
      3. public BigDecimal multiply(BigDecimal value) 乘法運算
      4. public BigDecimal divide(BigDecimal value) 除法運算
      5. public double doubleValue():把BigDecimal轉換成double類型。

包裝類

  • 引入:Java認為一切皆對象。java數據類型中引用數據類型是對象,但是在Java中8種基本數據類型不是對象,只是表示一種數據的類型形式,顯得很突兀。Java為了一切皆對象的思想統一,把8種基本數據類型轉換成對應的類,這個類稱為基本數據類型的包裝類。類本身也是對象,成為類對象
    1. byte Byte
    2. short Short
    3. int Integer
    4. long Long
    5. float Float
    6. double Double
    7. char Character
    8. boolean Boolean
  • 自動裝箱:可以直接把基本數據類型的值或者變量賦值給包裝類。Integer a1 = 12;
  • 自動拆箱:可以把包裝類的變量直接賦值給基本數據類型。Integer c = 100; int c1 = c;
  • 包裝類的特殊功能
    • 包裝類作為類首先擁有了Object類的方法。
    • 包裝類作為引用類型的變量可以存儲null值。
  • 具體來看特殊功能主要有:
    • 可以把基本數據類型的值轉換成字符串類型的值,調用toString()方法。Integer it = 100;
      • 1、調用Integer.toString(基本數據類型的值)得到字符串(沒有什么用)。String itStr = it.toString();
      • 2、直接把基本數據類型**+**空字符串就得到了字符串 (推薦使用)。String itStr = it + "";
    • 把字符串類型的數值轉換成對應的基本數據類型的值。String numStr = "23";
      • – Xxx.parseXxx(“字符串類型的數值”) (沒有什么用) int numInt = Integer.parseInt(numStr);
      • – Xxx.valueOf(“字符串類型的數值”):(推薦使用) int numInt = Integer.valueOf(numStr);

正則表達式

  • 作用:是一些特殊字符組成的校驗規則,可以校驗信息的正確性,校驗郵箱是否合法。
  • 字符類:默認只能校驗一個
    • [abc]a、b或c(簡單類)
    • [^abc]任何字符,除了a、b或c(否定)
    • [a-zA-Z]a 到 z 或 A 到 Z,兩頭的字母包括在內(范圍)
    • [a-d[m-p]]a到d和m到 p:[a-dm-p](并集)
    • [a-z&&[def23]]d、e 或 f(交集)
    • [a-z&&[^bc]] a 到 z,除了 b 和 c:[ad-z](減去)
    • [a-z&&[^m-p]] a 到 z,而非 m 到 p:[a-lq-z](減去)
  • 預定義字符類:默認只能校驗一個
    • .任何字符
    • \d數字:[0-9]
    • \D 非數字: [^0-9]
    • \s空白字符:[\t\n\x0B\f\r]
    • \S非空白字符:[^\s]
    • \w單詞字符:[a-zA-Z_0-9]
    • \W非單詞字符:[^\w]
  • Greedy 數量詞
    • X? ,X一次或一次也沒有
    • X*,X零次或多次
    • X+,X一次或多次
    • X{n},X恰好 n
    • X{n,},X至少 n 次
    • X{n,m},X至少 n 次,但是不超過 m 次
  • 使用:"dsd2".matches("[a-zA-Z0-9]{4}") //true
  • 郵箱:email.matches("\\w{1,}@\\w{2,10}(\\.\\w{2,10}){1,2}")
  • 手機號:tel.matches("1[3-9]\\d{9}")
  • 擴展:String str="小李lv434fda324小強87632fad2342423小畫";
    • public String[] split(String regex)
      • String[] nameArrs = str.split("\\w+");
    • public String replaceAll(String regex,String newStr)
      • str.replaceAll("\\w+", "/")
  • 字符串遍歷
    • String qq="1243542234";
    • for (int i = 0; i < qq.length(); i++) {char ch = qq.charAt(i);}

泛型

  • 泛型就是一個標簽:<數據類型>

  • 泛型可以在編譯階段約束只能操作某種數據類型。

  • 注意:JDK 1.7開始之后,泛型后面的申明可以省略不寫。

  • 泛型和集合都只能支持引用數據類型,不支持基本數據類型。

  • 泛型的好處:泛型在編譯階段約束了操作的數據類型,從而不會出現類型轉換異常。

  • 自定義泛型類

    • class 類名<泛型變量>{}
    • 泛型變量建議使用 E , T , K , V
    • 核心思想:把出現泛型變量的地方全部替換成傳輸的真實數據類型。
  • 自定義泛型方法

    • 格式:修飾符 <泛型變量> 返回值類型 方法名稱(形參列表){}
    • 注意:方法定義了是什么泛型變量,后面就只能用什么泛型變量。
    • 泛型類的核心思想:是把出現泛型變量的地方全部替換成傳輸的真實數據類型。
    • public static <T> String arrToString(T[] nums) {StringBuilder sb = new StringBuilder();sb.append("[");if (nums != null && nums.length > 0) {for (int i = 0; i < nums.length; i++) {T ele = nums[i];sb.append(i == nums.length - 1 ? ele : ele + ", ");}}sb.append("]");return sb.toString();
      }
      
  • 自定義泛型接口

    • 格式: interface 接口名稱<泛型變量>{}
    • 泛型接口的核心思想,在實現接口的時候傳入真實的數據類型,樣重寫的方法就是對該數據類型進行操作。
  • 泛型通配符?

    • ?可以用在使用泛型的時候代表一切類型。public static void run(ArrayList<?> cars) {}
    • ? extends Car :那么**?必須是Car**或者其子類。(泛型的上限) public static void run(ArrayList<? extends Car> cars) {}
    • ? super Car :那么**?必須是Car**或者其父類。(泛型的下限。不是很常見)
    • E , T , K , V是在定義泛型的時候使用代表一切類型。

數組和集合

  • 數組

    • 1、Java語言中的數組是一種引用數據類型;不屬于基本數據類型。
    • 2、數組當中既可以存儲“基本數據類型”的數據,也可以存儲“引用數據類型”的數據(數組既可以存儲基本數據類型,又可以存儲引用數據類型,基本數據類型存儲的是值,引用數據類型存儲的是內存地址值)。
    • 3、數組是有對應的類,這個類是在JVM運行時創建的,所以沒有對應的class 文件;(通過數組創建語法 int[] a = {1, 100, 10, 20}; 可看出,無法查看 數組類,以及源碼);數組的父類是Object。
    • 4、數組一旦創建,在java中規定,長度不可變。
    • 5、java中的數組要求數組中元素的類型統一。比如int類型數組只能存儲int類型,自定義Person類型數組只能存儲Person類型。
    • 6、數組在內存方面存儲的時候,內存地址連續。 這是數組存儲元素的特點。數組實際上是一種簡單的數據結構。
    • 7、所有的數組都是拿“第一個小方框的內存地址”作為整個數組對象的內存地址。 (數組中首元素的內存地址作為整個數組對象的內存地址。)
    • 8、數組中每一個元素都是有下標的,下標從0開始,以1遞增。最后一個元素的下標是:length - 1 下標非常重要,因為我們對數組中元素進行“存取”的時候,都需要通過下標來進行。
  • 集合的由來:數組長度是固定的,當添加的元素超過了數組的長度時需要對數組重新定義, 這樣太過繁瑣。因此,Java內部給我們提供了集合類,能存儲任意對象,長度是可以改變的,隨著元素的增加而增加,隨著元素的減少而減少。

  • 區別
    1、數組既可以存儲基本數據類型,又可以存儲引用數據類型(基本數據類型存儲的是值, 引用數據類型存儲的是地址值),集合只能存儲引用數據類型(對象), 集合中也可以存儲基本數據類型,但是在存儲的時候會自動裝箱(JDK1.5新特性)變成對象。
    2、數組的長度是固定的,集合長度是可以改變的。
    3、定義數組時必須指定數組元素類型,集合默認其中所有元素都是Object。
    4、無法直接獲取數組實際存儲的元素個數,數組使用length獲取數組的長度,但集合可以通過size()直接獲取集合實際存儲的元素個數。
    5、集合有多種實現方式和不同的適用場合,如List,Set,Map等;而不像數組僅采用分配連續的空間方式。
    6、集合以接口和類的形式存在,具有封裝,繼承和多態等類的特性,通過簡單的方法和屬性調用即可實現各種復雜的操作,大大提高軟件的開發效率。


集合

  • 集合是一個大小可變的容器。
  • 容器中的每個數據稱為一個元素。數據==元素。
  • 集合的特點是:類型可以不確定,大小不固定。集合有很多種,不同的集合特點和使用場景不同。
  • 數組:類型和長度一旦定義出來就都固定了。
  • 集合的作用:
    • 在開發中,很多時候元素的個數是不確定的。
    • 而且經常要進行元素的增刪該查操作,集合都是非常合適的。
  • Java中集合的代表是:Collection,它是Java中集合的祖宗類。
  • Collection集合的體系:
    • Collection(接口)
      1. Set(接口)
        • HashSet****(實現類)
          • LinkedHashSet<>(實現類)
        • TreeSet<>(實現類)
      2. List****(接口)
        • ArrayList****(實現類)
        • LinekdList<>(實現類)
        • Vector<>(實現類)
  • 集合的特點:
    • Set系列集合:添加的元素是無序,不重復,無索引的。
      • – HashSet:同父類Set一致。
        • LinkedHashSet:添加的元素是有序,不重復,無索引的。
      • – TreeSet:不重復,無索引,按照大小默認升序排序
    • List系列集合:添加的元素是有序,可重復,有索引。
      • – ArrayList:同父類List一致。
      • – LinekdList:同父類List一致。
      • –Vector:是線程安全的,速度慢,工作中很少使用。
  • Collection集合的常用API
    • public boolean add(E e):把給定的對象添加到當前集合中 。
    • public void clear() :清空集合中所有的元素。
    • public boolean remove(E e):把給定的對象在當前集合中刪除。
    • public boolean contains(Object obj):判斷當前集合中是否包含給定的對象。
    • public boolean isEmpty():判斷當前集合是否為空。
    • public int size(): 返回集合中元素的個數。
    • public Object[] toArray(): 把集合中的元素,存儲到數組中。
  • Collection集合的遍歷方式
    • 迭代器
      • public Iterator iterator():獲取集合對應的迭代器,用來遍歷集合中的元素的。 Iterator<String> it = lists.iterator();
      • E next():獲取下一個元素值。
      • boolean hasNext():判斷是否有下一個元素,有返回true ,反之。while (it.hasNext()) { System.out.println(it.next());}
    • foreach(增強for循環)
    • JDK 1.8開始之后的新技術Lambda表達式
      • lists.forEach(s -> {System.out.println(s);});
      • lists.forEach(s -> System.out.println(s));
      • lists.forEach(System.out::println);

ps:b站課程《黑馬程序員Java13天進階》根據官方筆記結合自身情況整理的筆記
視頻鏈接

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

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

相關文章

如何系統地入門學習stm32?

如何系統地入門學習stm32&#xff1f; 作為一個在嵌入式領域摸爬滾打十余年的工程師&#xff0c;看到這個問題&#xff0c;我不禁想起自己當年啃著厚重的數據手冊&#xff0c;對著一塊藍色的PCB板冥思苦想的日子。STM32的學習之路&#xff0c;說難不算特別難&#xff0c;說簡單…

考公:數字推理

文章目錄 1.真題12 312 530 756 ()-3 3 1 12 17 ()356 342 333 324 ()30 28 27 25 () 2215105 1494 1383 1272 ()2 3 8 21 46 ()4/25 1/4 4/9 1 ()39 416 630 848 ()5 8 11 17 () 10714 21 40 77 () 229 2.數字推理方法2.1 差值法2.2 比值法&#xff08;乘法關系&#xff09;2.…

自動化測試相關協議深度剖析及A2A、MCP協議自動化測試應用展望

一、不同協議底層邏輯關聯分析 1. OPENAPI協議 OPENAPI 協議核心在于定義 API 的規范結構&#xff0c;它使用 YAML 或 JSON 格式來描述 API 的端點、請求參數、響應格式等信息。其底層邏輯是構建一個清晰、標準化的 API 描述文檔&#xff0c;方便不同的客戶端和服務端進行對接…

2025.04.17【Dendrogram】生信數據可視化:Dendrogram圖表詳解

Dendrogram customization Go further with ggraph: edge style, general layout, node features, adding labels, and more. Customized circular dendrogram Learn how to build a circular dendrogram with proper labels. 文章目錄 Dendrogram customizationCustomized c…

SRS流媒體服務器

SRS流媒體服務器簡介 SRS(Simple RTMP Server)是一個開源的流媒體服務器&#xff0c;主要用于直播和WebRTC場景。以下是關于SRS的關鍵信息&#xff1a; 主要特性 支持多種協議&#xff1a;RTMP、HTTP-FLV、HLS、WebRTC、SRT等低延遲&#xff1a;特別優化了WebRTC和HTTP-FLV的…

R語言之環境清理

有時候 R 環境中殘留的變量可能會導致警告&#xff0c;可以嘗試清理工作空間并重新加載數據。 警告信息: In mget(objectNames, envir ns, inherits TRUE) : 重新評估被中斷的許諾 # 觀察前6行 head(iris)# 觀察數據結構 str(iris)# 探知數據的極值和分位數&#xff0c;以及…

RAG工程-基于LangChain 實現 Naive RAG

摘要 本篇文章以實現簡單的第一范式 RAG-Naive RAG為目標&#xff0c;并最終創建并實現一個基于RAG的論文分析器的項目。 LangChain 文檔加載 文檔加載是 RAG 流程的起點&#xff0c;它負責從各種數據源讀取原始文檔&#xff0c;將其轉化為程序可處理的格式。LangChain 支持多…

Rust網絡編程實戰:全面掌握reqwest庫的高級用法

一、開篇導引 1.1 對比Python Requests解釋為何reqwest是Rust生態的標桿HTTP客戶端 在Python生態中&#xff0c;Requests 庫以其簡潔易用的API成為了HTTP客戶端的首選。它使得開發者能夠輕松地發送各種HTTP請求&#xff0c;處理響應&#xff0c;而無需過多關注底層細節。然而…

k8s中sidecar死循環

序言 怎么發現我的同事們很上進呢&#xff0c;估計做了下賤的事兒吧。 傷不到我&#xff0c;不代表不疼&#xff01; sidecar產生的問題 1 背景 在k8s的環境中&#xff0c;pod的使用越來越多了&#xff0c;也就產生了sidecar容器&#xff0c;在現在的環境中&#xff0c;一個pod…

Day53 二叉樹的層序遍歷

給你二叉樹的根節點 root &#xff0c;返回其節點值的 層序遍歷 。 &#xff08;即逐層地&#xff0c;從左到右訪問所有節點&#xff09;。 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* T…

C盤清理技巧分享

一、系統級深度清理 1. 存儲感知自動化 路徑:設置 → 系統 → 存儲 → 開啟「存儲感知」配置策略: 臨時文件:每 1-2 周自動清理回收站:超過 30 天自動清空應用緩存:按需求設置清理頻率進階操作:在「高級存儲設置」中關閉「傳遞優化」(減少更新緩存占用)2. 磁盤清理工具…

面試題--隨機(一)

MySQL事務中的ACID特性&#xff1f; A 原子性 事務是一組SQL語句&#xff0c;不可分割 C 一致性 事務中的SQL語句要么同時執行&#xff0c;即全部執行成功&#xff0c;要么全部不執行&#xff0c;即執行失敗 I 隔離性 MySQL中的各個事務通過不同的事務隔離等級&#xff0c;產生…

Spring Boot資源耗盡問題排查與優化

Spring Boot服務運行一段時間后新請求無法處理的問題。服務沒有掛掉&#xff0c;也沒有異常日志。思考可能是一些資源耗盡或阻塞的問題。 思考分析 首先&#xff0c;資源耗盡可能涉及線程池、數據庫連接、內存、文件句柄或網絡連接等。常見的如線程池配置不當&#xff0c;導致…

Map和Set相關練習

目錄 1、只出現一次的數字 2、寶石與石頭 3、壞鍵盤打字 4、復制帶隨機指針的鏈表 5、大量數據去重 6、大量數據重復次數 7、前K個高頻單詞 1、只出現一次的數字 oj&#xff1a;136. 只出現一次的數字 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 1. 使用…

day45——非遞減數列(LeetCode-665)

題目描述 給你一個長度為 n 的整數數組 nums &#xff0c;請你判斷在 最多 改變 1 個元素的情況下&#xff0c;該數組能否變成一個非遞減數列。 我們是這樣定義一個非遞減數列的&#xff1a; 對于數組中任意的 i (0 < i < n-2)&#xff0c;總滿足 nums[i] < nums[i …

OOM 未觸發 JVM 崩潰的可能原因

1. OOM 未觸發 JVM 崩潰的可能原因? (1) 未配置 JVM 參數強制崩潰? 關鍵參數缺失?&#xff1a; 若未添加 -XX:CrashOnOutOfMemoryError&#xff0c;JVM 在 OOM 時可能僅拋出異常并正常退出&#xff0c;而非崩潰&#xff0c;因此不會生成 hs_err_pid.log。 # 正確配置示例&…

Axios 介紹及使用指南

本文將基于 Axios 原理&#xff0c;安裝及封裝方面展開描述&#xff0c;話不多說&#xff0c;現在發車&#xff01; 一、原理 Axios 中文文檔&#xff1a;起步 | Axios中文文檔 | Axios中文網 賽前科普&#xff1a; 下文將涉及到三個關鍵詞&#xff1a;Axios&#xff0c;Ajax…

C#插件與可擴展性

外接程序為主機應用程序提供了擴展功能或服務。.net framework提供了一個編程模型,開發人員可以使用該模型來開發加載項并在其主機應用程序中激活它們。該模型通過在主機和外接程序之間構建通信管道來實現此目的。該模型是使用: System.AddIn, System.AddIn.Hosting, System.…

Melos 發布pub.dev

確保登錄 置登錄狀態 按照提示操作&#xff0c;先運行&#xff1a; bash dart pub logout 這會清除當前的&#xff08;損壞的&#xff09;登錄信息。 然后再重新登錄&#xff1a; bash dart pub login 這一次它應該會在瀏覽器中打開 Google 登錄頁面&#xff0c;完成登…

4.黑馬學習筆記-SpringMVC(P43-P47)

1.SpringMVC簡介 SpringMVC技術&#xff08;更少的代碼&#xff0c;簡便&#xff09;與servlet技術功能相同&#xff0c;屬于web層開發技術。 SpringMVC是一種基于java實現MVC模型的輕量級web框架。 輕量級指的是&#xff08;內存占用比較低&#xff0c;運行效率高&#xff09;…