1. 程式人生 > >Collection的另外一個子類LinkedList&Set集合

Collection的另外一個子類LinkedList&Set集合

下標 好處 對象 應用 哪些 和equal 地址 sco 就會

計算機的內存中,有的是連續的內存空間,比如數組,就是連續的內存空間。除了這些連續的內存空間以外,剩下的內存空間都是以鏈表的形式存在。

鏈表又分為單向鏈表和雙向鏈表:

單向鏈表:一個單向鏈表分為一個數據域和一個指針域,指針域裏存放的是下一個單向鏈表的地址

雙向鏈表:一個雙向鏈表分為一個數據域,兩個指針域,第一個指針存放的是前一個雙向鏈表的地址,第二個指針域存放的是下一個雙向鏈表的地址

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集合