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

歡迎訪問 生活随笔!

生活随笔

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

java

java list有序还是无序_最详细的Java学习点知识脑图,从基础到进阶,看完还有啥你不懂的...

發布時間:2023/12/3 java 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java list有序还是无序_最详细的Java学习点知识脑图,从基础到进阶,看完还有啥你不懂的... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

歡迎關注專欄《Java架構筑基》——專注于Java技術的研究與分享!

Java架構筑基?zhuanlan.zhihu.com
  • Java架構筑基——專注于Java技術的研究與分享!
  • 后續文章將首發此專欄!
  • 歡迎各位Java工程師朋友投稿和關注
  • # 鏈接 Java程序員福利"常用資料分享"

一、代碼塊加載順序

  • 靜態代碼塊只會加載1次,在普通代碼塊前執行,會在類鏈接中的準備階段執行
  • 普通代碼塊每次new的時候都會加載,在構造方法前執行,其實是編譯的時候,代碼被放到構造函數前
  • 構造函數每次new都會加載。構造函數默認前面是super0方法。默認會先調用父類的構造函數
  • 二、類加載器雙親委派

    1. 類的加載過程

    ①. 類的加載

    class文件加入內存,生成class對象

    ②. 類的鏈接

    • 驗證:驗證class文件是否滿足JVM規范
    • 準備:靜態類變量默認初始化
    • 解析:常雖池的符號引用替換為直接引用

    ③. 類的初始化

    類構造器(構造方法和靜態代碼塊)初始化

    2. 類的加載器

    • bootStrapClassLoader:核心加載器
    • ExtersionClassLoader:擴展加載器
    • SystemClassLoader:系統加載器
    • ApplicationClassLoader:應用加載器
    • 自定義加載器

    3. 雙親委派

    • 保證加載的關是唯一的.只會有份所以向上由父類加載
    • 與Tomcat不滿足雙親委派

    三、String

    1. Stringa= "adf"

    • adf存在于方法區的常量池,棧空間的a直接指向常量池的adf

    2. String b = new String(" adf")

    • adf存在于常量池,堆空間生成對象,對象實際存儲指向常量池adf的地址,棧空間的b指向堆空間的地址

    3. Stringc= "adf" + "df";Stringd = "adfdf";Stringe= a +"df"

    • c和d棧都指向常量池的adfdf. e保存了堆中對象,對象指向的是常量池中的adfdf值
    • 直接常量操作,返回的地址是在常量池
    • 經過new或者不是純常量操作,會進行一-次new在堆中生成對象, 對象在指向常量池中數據
    • final修飾的String也在常量池

    4. final修飾,不可以被繼承(不可以被修改)

    • 出于安全考慮,java很多類都用字符串來描述
    • 處于內存考慮,字符串被常用,共享同一塊內存,減少內存使用量

    5. 一般字符串的內部操作

    • 轉成數組,toCharArray0
    • 數組操作變化值
    • String構造函數數組轉為字符串

    6. length0方法

    • 返回字符串的實際長度,字符串沒有size0方法

    四、Integer

    1. 直接賦值或者ValueOf田

    • 享元模式,池的技術
    • -128~127是常量,在堆中只會有一個對象

    2. new的話,是在堆中生成新對象

    3. BigInteger是整形,任意大小

    4. BigDecimal是浮點型,任意精度

    五、注解

    1. 元注解

    • 修飾注解
    • @Retention:注解的生命周期,Compile編譯, class類對象, RunTimer運行時(此生命周期才可以用被反射拿到)
    • @Target:接口,類,方法,變量,構造器
    • @Inherited:注解具有繼承性,隨著類繼承存在

    2. 可重復注解, 類型注解

    • Java8新特性

    六、集合

    1. 存儲單值

    ①. 數組

    • []初始化后長度不可以更改
    • 插入刪除效率不高
    • 查找速度快
    • 只有length成員變量表示長度,沒有其他的可用API

    ②. collection

    A. set

    a. 實現

    treeset

    • 底層是treemap.數據是紅黑樹結構
    • 可以按屬性進行排序,指定排序規則
    • 需要重寫比較函數,被存數據繼承comparable接口(數據是否相同按compareto決定)

    linkedhashSet

    • 按添加的順序有序
    • 底層也是linkedhashmap,數據+鏈表
    • 在原有的hashset的基礎上增加了添加元素的鏈接關系,使添加數據有序(對頻繁的遍歷要比hashset快)

    hashSet

    • 存儲無序的
    • 底層是hashmap,也是數組+鏈表存的

    b. 無序不可重復

    c. linkedhashset和hashset的數據,一定要重寫,并且要求hashcode方法和equals方法一致

    • hashcode決定了key存儲位置
    • equals決定了key是否相等

    B. list

    a. 實現

    arrayList線程不安全

    • 數組
    • 適用增刪改少,遍歷多

    vector線程安全

    • 數組:stack繼承于vector

    linkedList

    • 鏈表
    • 使用增刪改多,遍歷少

    b. 有序,可重復

    2. 存儲對值(map)

    ①. hashMap線程不安全

    • 底層樹數組+鏈表
    • java8后,數組+鏈表/紅黑樹,鏈表長度大于8的時候轉紅黑樹
    • 復合的數據需要重寫hashcode和equals方法
    • 多線程下死循環
      • 主要是rehash函數
      • 內部鏈表重寫計算的時候,多線程下會出現環
      • 鏈表的環造成get數據的時候會出現死循環

    ②. linkedHashMap線程不安全

    • 底層是數組+鏈表/紅黑樹
    • 根據添加數據的順序,有指針關聯添加的數據,數據按添加順序有序
    • 復合的數據需要重寫hashcode和equals方法

    ③. concurrentHashMap分段鎖線程安全

    • 復合的數據需要重寫hashcode和equals方法
    • java1.7是數據的分段鎖
    • java1.8是CAS實現的

    ④. hashTable線程安全

    • 方法用Synchronize修飾的
    • 不能有null的key和值
    • 復合的數據需要重寫hashcode和equals方法
    • 子類: Properties 取配置文件的數據

    ⑤. treeMap有序的

    • 底層是紅黑樹結構
    • 存儲的數據需要實現Comparable接口

    ⑥. key是無序的,不可以重復,使用set存儲所有的key; Entry是無序, 可重復

    ⑦. 擴容

    • 容量的0.75的時候,會擴容,擴為原來的兩倍,將數據拷貝到新的空間
    • Jdk7. Jdk8默認初始數組大小是16
    • Jdk8當鏈表長度超過8,就改用紅黑樹存儲
    • Jdk8底層是Node[]數組,Jdk是Entry[數組
    • 最大容量2的30次方

    3. collections

    集合相關的靜態方法集

    4. 排序

    • 自然排序:實現comparable重寫compareTo(Object o)方法(隨處可用的比較)
    • 定制排序:實現comparator重寫compare(Object o1,Object o2)方法(臨時性的比較)

    5. sizeQ方法

    返回的是元素的個數,集合是沒有length方法的

    6. 數組和集合的相互轉換

    • toArray0集合變數組
    • Arrays.asList ()數組變集合(注意,存的數據要是對象)

    7. 集合遍歷方式

    • for循環
    • iteraton迭代器
    • foreach方式
    • java8新特性,streem流

    8. 通配符?

    List<?>

    • 可以寫入null,不能寫入數據
    • 可以讀數據
    • List<? super A>; List<? extends A>有限制條件的通配符

    七、反射

    1. 動態語言的特性,拿到運行時對象的狀態類信息,class對象, 增加了代碼的靈活性

    2. 缺點:執行效率低,性能差

    3. 功能

    ①. 拿到運行時對象的類信息

    ②. 根據運行時對象信息創建對象

    ③. 根據運行時對象信息使用其方法

    ④. 根據運行時對象信息修改成員,修改私有成員

    ⑤. 動態代理

    • 創建一個實現接DInvocationHandler的類,它必須實現invoke方法
    • 創建需要被代理接口和實現類
    • 通過Pry)的I態nnewporvatalasloaderlader Cass iterfaces. InocationHander h)創建個代理
    • 通過代理調用方法
    • 生成的動態代理關會調用nvocationHandler實現類中的invoke方法
    • invoke方法中我們可以選擇執行被代理實現類的方法,并在其前后進行處理

    4. 拿到class對象

    • 類名.class
    • 對象.getClass0
    • Class類的靜態方法forName0
    • ClassLoader對象的IoadClass0方法獲取

    5. class對象的作用

    • Constructor拿到類的構造函數,實例化對象
    • Field拿到類的屬性
    • Method拿到類的方法(Invoke調用方法)

    6. 提升反射使用的效率

    • 盡量不要getMethods0后再遍歷篩選,而直接用getMethod(methodName)來根據方法名獲取方法
    • forName獲取類對象,使用緩存

    八、lambda表達式

    1. 實質:作為接口的實例

    2. 接口需要是函數式接口

    • 接口中只有一個抽象函數
    • 可以用注解聲明接口,@FunctionInterface
    • util.function包下有大量的函數式接門

    九、= =和equals

    1. = =

    • 基本數據類型比較值
    • 引用類型比較地址

    2. equals

    • 比較的是引用類型
    • 重寫過的quls比較的是地址obiec的原生方法批比較的是地址

    # 鏈接 Java程序員福利"常用資料分享"

    總結

    以上是生活随笔為你收集整理的java list有序还是无序_最详细的Java学习点知识脑图,从基础到进阶,看完还有啥你不懂的...的全部內容,希望文章能夠幫你解決所遇到的問題。

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