1、 Collection 集合
集合類的特點集合只用於存儲對象,集合長度是可變的,集合可以存儲不同類型的對象。
iterator 迭代器 取出集合中的元素
兩個常用子類:
a. List
b. Set
2、List 序列
a. 有序的; 存入的順序和取出的順序一致
b. 元素是有索引的;
c. 元素可以重複
瞭解List接口的特有方法,注意:這些特有方法都是圍繞着腳標定義的。
a. add(index,element);
b. remove(index);c. set(index,element);
d. get(index);
List接口支持,增刪改查操作
---ListIterator 列表迭代器,可以同時操作容器
---Victor:數組結構的,是同步的。被ArrayList替代,因爲效率低
---ArrayList:數據結構是數組結構,是不同步的。查詢速度很快
---LinkedList:數據結構是鏈表結構,是不同步的。增刪的速度很快
List類中支持對對集合中元素進行迭代的同時對元素進行增、刪、改、查
3、 注意LinkedList中的特有的方法,可以利用這些方法模擬堆棧,或隊列
addFirst();
addLast();
getFirst();
getList();
removeFirst();
removeLast();
offerFirst(E e);
offerLast(E e);
peekFirst();
peekLast();
4、 set: 集 元素不可以重複
set裏面沒有特殊的方法,其方法和Collection方法一致
5、 set的子類
---HashSet: 是不同步的 查詢速度快,不能重複
記住:存儲到哈希表中的對象,必須覆蓋hashCode和equals方法。建立在哈希表判斷元素唯一性的方式。
---TreeSet:是不同步的 他可以對set集合中的元素進行排序。 數據結構是二叉樹。
TreeSet排序有兩種方式:
第一種:讓元素自身具備比較性。讓元素對象實現Comparable接口,覆蓋compareTo方法。
但是,需求中,需要元素的非自然排序時,或者元素本compareTo身就不具備自然排序,怎麼辦?
第二種:讓容器具備比較性。其實就是定義一個比較器,就是實現Comparator接口,覆蓋compare方法。
List結合判斷元素是否相同使用的是equals方法;
HashSet集合判斷元素相同,依據hashCode和equals方法;
TreeSet集合判斷元素相同,依據compareTo或者compare方法的return 0;
ArrayLIst:數組結構,所屬於List,想到索引,查詢快
LinkedList:鏈表結構,所屬於List,想到增刪快
HashSet:哈希表結構,所屬於Set,想到唯一性,查詢速度快
TreeSet:二叉樹結構,所屬於Set,想到唯一性,而且排序,自然排序Comparable,compareTo 比較器排序,comparator compare方法
HashSet hs = new LinkedHashSet();//在哈希表基礎上保證有序。
6、 泛型:先明確類型,存儲時,如果類型不匹配,就編譯時報錯。
a.JKD 1.5版本出現的新特性;
b.泛型將運行時期的問題轉移到了編譯時期。
c.避免了強制轉換的麻煩
d.泛型技術是用於編譯時期的技術。
7、 泛型的體現:
<>這就是用於定義類型參數的符號;泛型可以簡單的理解爲,接收具體的元素類型。
對源碼進行編譯時,通過泛型進行類型的檢查;如果類型沒有問題,則將源碼編譯成class文件。
注意,class文件中是不帶有泛型信息的,這種情況稱之爲泛型擦除。
8、 類型操作的對象類型不確定,將泛型定義在類上;
方法中操作的類型不確定,將泛型定義在方法上。
如果是在靜態方法上使用泛型,該泛型必須定義在方法上。
9、 泛型接口:定義的類實現了一個帶有泛型的接口,覆蓋接口方法的時候要符合泛型類型;
在實現接口的時候,不明確泛型的類型,覆蓋方法的時候繼續使用泛型;
10、 泛型的限定:分兩種 上限 下限:
? extends E: 上限 接收E類型或者E的子類型
? super E:下限 接收E類型或者E的父類型
11、 Map: 視圖
a.Map集合中存儲的是一對兒元素,鍵和值。
b.必須保證鍵的唯一性。
c.如果存儲鍵相同,值會覆蓋。
存的方式:put(key,value);
取得方式:keySet(),entrySet().values();原理:就是將Map集合轉換成set集合或者Collection,在通過Iterator取出。
Map子類
---Hashtable:哈希表結構,同步的。null不可以作爲鍵和值
---HashMap:哈希表結構,不同步的。替代了Hashtable。允許null以作爲鍵和值 不保證順序
---TreeMap:基於二叉樹,不同步的,可以對map集合中的鍵進行排序。
12、 什麼時候用Map集合?
在分析需求中,如果出現了映射關係,就要先想到具備對應關係的容器。
比如:數組,list,map
如果對應關係的一方是有序的數字,可以考慮數組和list,元素固定考慮list。
如果對象關係的一方沒有有序的數字,就要想到map。
通常這些對應關係的容器都可以用於查表法。
13、 Arrays:用於操作數據的工具類提供的很多常見的方法比如排序,搜索等
該類中的方法都是靜態的。
14、 數組轉成集合List。List asList([]);
好處:可以使用集合List的方法來操作數組中的元素。可以使用集合該查方法,只要不改變數組長度都可以。
弊端:不可以使用集合的增刪方法
List集合使用的最終還是這個數組,數組的固定長度的。所以不可以對其進行增刪。
特殊情況:
如果數組中存儲的是基本數據類型,那麼asList會將這個數組實體作爲集合中的元素。
如果數組中存儲的都是對象,那麼asList會將數組中的元素作爲集合中的元素
15、 將集合轉成數組。
如果傳遞的數組長度小於集合的長度,在toArray內部會自動創建一個長度和集合相同的數組。用於存儲集合的元素。
如果傳遞的數組長度大於等於集合的長度,則使用該數組存儲集合的元素
一般情況下最好使用集合的size();
限定數組的增刪。
16、 Collections:
a.用於操作集合的工具類。
b.提供了很多靜態方法。
比如對List集合排序,二分查找,位置置換。對排序的元素進行逆轉。reverseOrder
還可以獲取集合的最大值。
最牛叉的是將非同步的集合轉換成同步的集合synchronizedXXX
17、 新的for循環。
格式:for(元素類型 變量名:Collection集合or數組)
{
執行語句;
}
18、 傳統for和foreach的區別?
foreach循環必須有被遍歷的目標,要麼是Collection,要麼是數組。
建議遍歷數組是,用傳統for循環,因爲可以對數組的角標進行操作。
19、 可變參數 int... arr
可變參數用於簡化書寫,
注意:只能定義在參數列表的最後。
20、 System.getProperty("line.separator");可以實現在任何操作系同下的換行,因爲該功能獲取了當前系統的換行符。
21、 RunTime類:沒有結構函數,不可以實例化,但是還提供了非靜態方法。所以應該會提供靜態的返回值類型爲RunTime的方法獲取該對象。
22、 Math:用於數學運算的類。提供了數學運算的靜態方法
ceil 返回大於參數的最小整數
floor 返回小於參數的最大整數
round 四捨五入
max(a,b)返回兩個數中最大的一個
pow(a,b);返回a的b次冪
23、 日期對象和毫秒值之間的轉換。
毫秒值轉成--->日期對象
a.new Date(long);構造函數方法;
b.setTime(long);
獲取日期對象,可以通過對對象的方法對該日期進行指定字段的操作。
日期對象轉成毫秒值--->通常用於進行運算--->通過Date對象的getTime方法
24、 import的出現是爲了簡化類名的書寫