原创 自定義定時器和Java自帶原生定時器

一. 定時器概述 何爲定時器? ①就像可以設置鬧鐘的時鐘一樣。當我們往時鐘裏添加一個鬧鐘時,可以設置鬧鐘的首次執行時間、執行間隔時間、備註、是否啓動等屬性。 ②一個時鐘可以設置多個不同的鬧鐘,每個鬧鐘可以有各自的首次執行時間、執

原创 打印完全格式的日期格式 包含 年月日時分秒毫秒

/** * 獲取完全格式的日期格式 * @return 格式如 2020-06-30 15:15:15:015 */ public static String getFullDateTime(){ StringBuffer sb

原创 靜態代理、JDK動態代理及Cglib動態代理各自存在的缺點及代碼示例

1.靜態代理: 基本描述:靜態代理代理的是某一個接口的實例對象,以接口的形式對外展示。當然如果不需要以接口的形式對外展示,直接代理對象即可。 缺點:只能代理某一種類型,要想代理其他類型,需要修改代碼。 package unit

原创 HashMap之往紅黑樹添加元素-putTreeVal方法源碼解讀

PS:由於文檔是我在本地編寫好之後再複製過來的,有些文本格式沒能完整的體現,故提供下述圖片,供大家閱覽,以便有更好的閱讀體驗: HashMap之往紅黑樹添加元素-putTreeVal方法源碼解讀 當要put的元素所在數組索引位

原创 HashMap之鏈表轉紅黑樹(樹化 )-treefyBin方法源碼解讀(所有涉及到的方法均有詳細解讀,歡迎指正)

PS:由於文檔是我在本地編寫好之後再複製過來的,有些文本格式沒能完整的體現,故提供下述圖片,供大家閱覽,以便有更好的閱讀體驗: HashMap之鏈表轉紅黑樹(樹化 )-treefyBin方法 方法概述:先將鏈表節點

原创 Java017Java泛型-參數化類型(泛型類、泛型接口、泛型方法)

摘自《Java編程思想》 一般的類和方法,只能使用具體的類型,要麼是基本類型,要麼是自定義的類。如果要編寫可以應用於多種類型的代碼,這種刻板的限制對代碼的束縛就會很大。 在面向對象編程語言中,多態算是一種泛化機制。例如,可以將方法

原创 SSH框架01、Spring概述

摘自:《Java EE互聯網輕量級框架整合開發SSM框架(Spring+SpringMVC+MyBatis)和Redis實現》 一、介紹 Spring是一個容器,通過反轉控制(IoC-Inversion Of Control)和依

原创 HashMap的resize()即擴容方法源碼解讀(已重新完善,如有不足之處,歡迎指正~)

分析HashMap的resize()即擴容方法的源碼,會發現主要分兩部分操作: 爲創建新數組初始化新數組容量和新數組擴容閾值; 創建新數組後,需將數據從舊數組轉移到新數組上來,舊數組上的數據會根據(e.hash & oldCap

原创 switch case可以用string(千萬注意要加上break)

package unittest; import java.io.IOException; import java.util.ArrayList; public class Test { ArrayList arryGlobal

原创 HashMap中紅黑樹TreeNode的split方法源碼解讀

PS:由於文檔是我在本地編寫好之後再複製過來的,有些文本格式沒能完整的體現,故提供下述圖片,供大家閱覽,以便有更好的閱讀體驗: HashMap中紅黑樹TreeNode的split方法源碼解讀 分析HashMap$TreeNod

原创 隨處可見的緩存思想(有補充的歡迎留言交流)

【事先將要使用到的數據緩存好,以便使用的時候給予更快速的響應】 面向對象編程創建和銷燬對象費時費力。因此減少創建和銷燬對象的次數,如果可以對現存對象重複使用,尤其對於那些非常耗資源的對象,將會有效提高程序效率。 String對象(

原创 2的n次冪與二進制位全爲1之間的聯繫,只差一個1

現象: 2 ^ 3 = 8 = (1+2+4) +1 =(2 ^ 0+2 ^ 1+2 ^ 2)+1 即2 ^ 3 - 1=(2 ^ 0+2 ^ 1+2 ^ 2) 2 ^ 4 = 16 = (1+2+4+8) +1 =(2 ^ 0+

原创 HashMap底層數據結構及其增put刪remove查get方法的代碼實現原理

1.HashMap底層數據結構是數組+鏈表(jdk1.7頭插法<擴容時鏈表逆序可能會導致環形鏈表的問題出現> jdk1.8尾插法)+紅黑樹(jdk1.8). 2.HashMap中數組的容量默認爲16,負載因子默認爲0.75,當數組

原创 jdk1.8 Java函數式編程示例:Lambda函數/方法引用/4種內建函數式接口(功能性-/消費型/供給型/斷言型)

package unittest; import java.util.function.Consumer; import java.util.function.Function; import java.util.function

原创 HashMap中保證紅黑樹根節點一定是對應鏈表頭節點moveRootToFront()方法源碼解讀

紅黑樹根節點若不爲其對應鏈表的頭節點,則按照下述步驟的處理,將根節點向前移動到頭節點: 將根節點從所在鏈表中刪除,即鏈表的刪除操作:修改根節點的前後節點的指向即可,即將根節點的上一節點的下一節點設置爲根節點的下一節點,將根節點的