Collection的另外一個子類LinkedList&Set集合
計算機的內存中,有的是連續的內存空間,比如數組,就是連續的內存空間。除了這些連續的內存空間以外,剩下的內存空間都是以鏈表的形式存在。
鏈表又分為單向鏈表和雙向鏈表:
單向鏈表:一個單向鏈表分為一個數據域和一個指針域,指針域裏存放的是下一個單向鏈表的地址
雙向鏈表:一個雙向鏈表分為一個數據域,兩個指針域,第一個指針存放的是前一個雙向鏈表的地址,第二個指針域存放的是下一個雙向鏈表的地址
Collection集合的兩個子類:ArrayList和LinkedList:
ArrayList的底層是數組,LinkedList的底層是一個鏈表
那麽來區分呢一下數組和集合在進行數據的CURD(增刪改查)的時候的優缺點
數組由於是連續的內存空間,有序列號(下標),所以數組在進行數據的查詢時速度快於集合,但是正是由於數組的連續空間組織,使得數組再進行數據的增刪時慢於集合,集合只需要將鏈表斷開,重連即可
而數組要一位一位的換位置,所以數組的增刪要慢於集合。
這也正是底層的結構決定了上層的應用。
隊列:就和隊伍一樣,先進先出。
棧:先進後出,虛擬機裏的棧是底端封口的。
ArrayList<String> list=new ArrayList<>(); 泛型:前邊的尖括號裏寫了泛型的類型,後邊的尖括號裏就可以不用寫了,會自動推斷出泛型的類型的(在java1.7版本以後出現的)
關於上一篇的抽象類和接口的向上轉型問題,我的想法得到了肯定。
Syso("\t")
Scanner sc =new Scanner(System.in);
只要將sc這個對象創建出來,在作用域裏,就可以進行多次的調用。
Iterator it =list.iterator();
it.hasNext(); 哈希Next方法,判斷這個對象的哈希地址是否為空。
在編譯器進行編譯的時候,會將整個包都進行編譯, 所以這個包下只要有同名的類,就會報錯。
泛型的四種常用類型 E:element T : type K:key V:value
不能有靜態泛型類,因為虛擬機一運行,就將靜態的東西加載到內存中,而泛型是非靜態的,泛型要等到創建對象之後才能加載到內存中,所以靜態類加載時泛型不具體,不能有靜態泛型類。
泛型的好處:只需要寫一個方法,任何類型的數據都可以使用,必方法的重載還要方法,代碼的重用率高。
泛型的通配符 ?
java.lang包下的所有東西,使用的時候都不需要導包。
靜態導入:將java.lang包用static修飾,然後導入 以後在使用System.out.println() 時,寫為out.println() 即可。
可變參數: fun();
public void fun(int... a) fun(){
} 想給fun方法傳遞幾個參數都可以,當參數列表有很多參數時,可變參數必須放在最後一個,這樣才好區分哪些為別的參數,那些為可變參數
Set:Collection集合的另一個子類:
Set和List的區別:
List是有序,可重復的
Set是無序,不可重復的
對於Set的不可重復:相同類型的對象,無論你存儲多少個,Set集合只保留一個(自定義對象:針對重寫hashCode方法和equals方法,若不重寫
hashCode方法和equals方法,Set只能通過地址來判斷是否相同,做不到不重復)
加載因子:某集合的容量為16,若它的加載因子為1,則只有當16個元素都存儲滿了,才會擴容,當加載因子為0.75時,集合容量為100,存儲75個
對象,就會擴容
哈希沖突:哈希值計算出的索引位置重復,導致該索引位置已經存儲了元素,但是還有元素需要存儲在這個索引位置,這叫哈希沖突,也叫哈希碰撞
hasCode方法重寫的原理:看元素的哈希值是否相同
hashCode方法未重寫前:根據地址返回一個哈希值
Set的存儲原理:
首先調用元素對象的hashCode方法,來判斷該位置有無元素,若無元素,則直接插入
若有元素,則調用元素對象的equals方法,判斷元素對象的值是否相同,若相同,則不插入,若不相同,則鏈式插入,當達到八個元素時,
使用紅黑樹進行插入。
LinkedList代碼演示
1 public class LinkedList 類 { 2 public static void main(String[] args) { 3 // 創建對象 4 LinkedList<String> list=new LinkedList<>(); 5 // 添加方法 6 list.add("1"); 7 list.add("2"); 8 list.add("3"); 9 list.add(1, "4"); 10 System.out.println(list); 11 } 12 }
Collection的另外一個子類LinkedList&Set集合