反射、HashMap、ArrayList与LinkedList区别
生活随笔
收集整理的這篇文章主要介紹了
反射、HashMap、ArrayList与LinkedList区别
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1,反射機制答:JAVA反射機制是在運行狀態中,對于任意一個類,都能夠知道這個類的所有屬性和方法;對于任意一個對象,都能夠調用它的任意方法和屬性;這種動態獲取信息以及動態調用對象方法的功能稱為java語言的反射機制。
2,HashMap的底層實現1),HashMap是繼承自Map接口與AbstractMap抽象類,按照鍵值對的方式進行存儲數據,無序,存儲的key值是唯一的,但是value值可以重復,key與value可以為null,但是key只能有一個為null,值可以多個為null2),HashMap的底層實現在jdk1.8之后是數組+單鏈表+紅黑樹,在鏈表的長度大于等于8并且數組的長度大于等于64的時候會將鏈表轉化成紅黑樹,在紅黑樹的節點數小于等于6的時候會將紅黑樹轉化成鏈表,存儲鍵值對的其實是一個node節點,數組是node數組,發生hash沖突是采用的是拉鏈法。3),HashMap在jdk1.7之前的底層是數組+鏈表,每次發生hash沖突,進行拉鏈法采取的是頭插法(這樣會導致擴容的時候元素的指向與擴容之前有所不同,可能會造成環,從而使得程序陷入死循環),jdk1.8之后采用的是尾插法。4),HashMap的初始值是16,閾值是0.75,擴容的倍數為2倍。如果初始化的時候調用的是無參構造器,那么HashMap會在第一次put元素的時候進行第一次擴容,也就是默認的長度16。如果初始化的時候我們傳入了自定義的數組長度,那么HashMap會選取大于或等于傳入值的2的倍數的值。擴容時對所有的元素進行重新計算在數組中的存儲位置。5),HashMap中的對于key值存儲的位置采取了重新hash的方法,即(h=key.hashCode())^(h>>>16);
3,ArrayList與LinkedList的區別1),ArrayList的底層時動態數組;LinkedList的底層時雙向鏈表2),根據底層的不同,可知,ArrayList中所有的元素存儲的地址都是一串連續的地址空間;而LinkedList則是無序,隨機的地址空間3),ArrayList由于有索引的存在,而LinkedList是節點之間的指向,在查找的時候必須依次遍歷查找,所以ArrayList的查找與修改效率高于LinkedList4),LinkedList由于在刪除與添加元素的時候只需要改變節點之間的指向,而ArrayList刪除與添加元素的時候需要移動添加位置之后的所有元素,所以它的刪除與添加的效率高于ArrayList。5),但是也不是絕對的,比如ArrayList刪除(或添加)最后一個元素的效率與LinkedList查找(或修改)第一個元素與最后一個元素的效率都是高的。
總結
以上是生活随笔為你收集整理的反射、HashMap、ArrayList与LinkedList区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ArrayList整理
- 下一篇: 不同范数下的余弦定理_第06题 | 从源