javase_11(集合的理解)


集合類:

爲什麼使用集合類?

在面向對象的編程思想中,都是以對象的形式對事物進行描述的,爲了保證對象的生命週期,我們需要持有對象
(什麼叫做持有對象呢?Person p = new Person())

數組和集合類的區別?

1.數組和集合類都是容器,都能存儲對象
2.集合類優點就是長度可變,而數組一旦定義.長度是不能修改的.


集合的特點:

集合類可用於存儲對象.
集合類的長度可變
一個集合可以存儲多種類型的對象..

Collection 接口:
1.一個獨立的元素的序列,這些元素從一條或多條規則
2.collection接口下分爲list集合和Set集合
3.list集合的特點是元素有序,可以允許有重複的元素
4.set集合的特點是元素無序,不允許有重複的元素
↓↓
List(子接口)
↓↓
ArrayList(實現類)
1.底層數組實現,查找快,增刪慢
2.線程不安全
----------------------------------
Vector(實現類)
1.與ArrayList基本一樣
2.線程安全
----------------------------------
LinkedList(實現類)
1.底層是鏈表的實現
2.增刪快,查找慢


{
List集合元素存取方法一致
使用add()方法增加元素
由於List集合有序,可以使用get()方法獲取元素
元素的迭代(Iterator)
通過集合對象的iterator()方法獲得迭代器Iterator
通過Iterator迭代器的hasNext()方法判斷是否存在下一個元素
通過Iterator迭代器的next()方法獲取下一個元素
元素的迭代(Enumeration)
迭代Vector集合中的元素可以使用Enumeration
通過Enumeration的hasNextElements()方法判斷是否還有元素
通過Enumeration的nextElement()方法返回下一個元素
}


↓↓
Set(子接口)
↓↓
Set集合無須,不允許有重複的元素
1.set集合通過存入對象的equals方法來保證集合中沒有重複的元素

HashSet(實現類)
HashSet是set的子類,因而沒有重複元素
底層使用了哈希算法保證沒有重複元素
存儲對象時,先調用對象的HashSet()方法,找到存儲位置,再和當前的存儲位置上已經存在的元素通過equals()方法進行比較,如果返回false,才能進行存儲
往HashSet集合裏存儲的對象必須是重寫HahCode 和equals()方法。

TreeSet(實現類)
TreeSet集合通過二叉樹算法保證無重複元素,並對元素進行排序
第一種方式: 如果對象實現了Comparable接口,就可以存入TreeSet集合 因爲它會自動的去調用裏面的一個比較方法.所以在Person裏面重寫
第二種方式: 如果對象沒有實現Comparable接口,在創建TreeSet對象時,需要給構造函數扔進一個比較器,實現Comparator接口 .(必須要在匿名內部類重寫.或者繼承一個類來重寫)

----------------------------------

Map接口:
1.一組成對的“鍵值對”對象,允許根據鍵來查找值
2.Map集合的健值不允許有重複的,所以Map所有的鍵都構成了一個Set集合

Iterable接口:
1.JDK1.5新定義的接口作爲Collection的父接口
2.主要就是實現了增強for循環

 

jdk1.5的新特徵:

泛型:
由於集合可以存儲不同數據類型的對象,所以取元素(地址)時會導致類型轉換錯誤
jdk1.5新增加了泛型,爲了減少操作集合的出錯裏
例如: ArrayList<Person> arraylist = new ArrayList<Person>();
比喻: 我在每一個掛了一個牌子.只能是Person 使用.做了一個限制..

使用泛型的好處:
1.提高的代碼的安全性
2.講運行期間的問題轉到了編譯期間的問題(你懂的~~)
3.省起了類型轉換的麻煩
4.泛型類的出現優化了程序設計

增強for循環:
新接口Iterable中定義了增強for循環
可以通過增強for循環對數組和集合進行遍歷
在迭代集合元素時,需要定義了泛型才能使用for循環

可變參數:

有的時候在設計方法時無法確定將來別人會傳入的參數個數
JDK1.5增加了新特性可變參數,在函數中只聲明參數類型,不規定個數
方法接受的參數實際上是一個數組,可以在方法中遍歷數組
可變參數只能被定義爲函數的最後一個形參
語法格式: 返回值 函數名(參數類型… 形參)

 

package com.javami.kudy.javaapin.StringStudy;
 
 public class Test {
         public static void main(String[]args)
         {
             show(33,45,7657,332,11,5465);
         }
         
         public static void show(int ... i)
         {
             for(int num : i)
                 System.out.println(num);
         }
 }


 

發佈了52 篇原創文章 · 獲贊 3 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章