J2SE基礎:9.集合一,j2se基礎集合
1:集合:
集合的概念:資料容器(與數組類似)。容器比較適合裝對象。
2:集合與數組的優缺點:
數組存取效率高,使用時要求容量大小固定;適合基礎資料型別 (Elementary Data Type)的存取;
集合存取效率上有一定的犧牲,集合容量大小可以根據實際需要改變,
提供豐富的存和取對象的方法,適合成為對象的“容器”
3:集合架構體系圖
介面的表徵圖
類的表徵圖
繼承的表徵圖:實心箭頭
實現的表徵圖:虛線
4:集合架構的分類:
A:集合(SET)
B:列表(List)
C:鍵值對(Map)
D:隊列(Queue)
Collection的方法
add(添加)
remove(刪除)
size(大小)
clear(清空)
Iterator(迭代器)
toArray(轉成數組)
A:集合SET
特點:(1)不重複(邏輯相等,equals);
(2)可以加一個NULL元素。
HashSet:
特點:(1):雜湊演算法實現,無序的。
(2):不是線程同步的。
由於HashSet中對象是不重複的。因此要重寫對象的equals方法。由於不重複,因此往集合中
加入對象時,要一個個的比較是否重複。效率比較低。
因此,往集合中加元素時,先比較對象的hashCode是否在集合存在。
如果不存在:直接添加
如果存在:再比較兩個以象是否equals,如果equals(),對象重複,不添加。
如果不equals(),對象不重複。
LinkedHashSet
特點:(1):底層機制鏈表方式實現。
(2):元素是有序的。(是指添加進去的元素有序,不是指對象之間的順序)
(3):不是線程同步的。
(4):由於是用鏈表實現,因此增刪改對象比較容易。尋找比較慢。
CopyOnWriteArraySet
特點:(1):底層機制數組方式實現。
(2):元素是有序的。(是指添加進去的元素有序,不是指對象之間的順序)
(3):它是線程同步的。
(4):由於是用數組實現,因此尋找比較快。增刪改比較慢。
線程同步與非線程同步:
線程同步:當多個線程同時訪問一個資源時,只能有一個線程訪問該資源。因此效率比較
慢。但資料對於多個線程來說是同步的。
非線程同步:當多個線程同時訪問一個資源時,多個線程都可以訪問該資源。因此效率比較
快,但會造成多個資料看到的資料不同步。
TreeSet
特點:元素有序的(對象之間有序)
已知集合A={1,3,5,7,9,11},B={1,7,17}試以集合A與B中各取一個數作為點的座標,在同一直角座標系中所確定
我得出的是A 32種
(1,1)(1,7)(1,17)
(3,1)(3,7)(3,17)
(5,1)(5,7)(5,17)
(7,1)(7,7)(7,17)
(9,1)(9,7)(9,17)
(11,1)(11,7)(11,17)
(1,3)(1,5)(1,9)(1,11)
(7,3)(7,5)(7,9)(7,11)
(17,1)(17,3)(17,5)(17,7)(17,9)(17,11)
如果不考慮重複的話有6*3*2=36種搭配
因為有相同數字,有四個組合重複了兩次(1,1)(7,7)(1,7)(7,1)所以36種搭配要減去4種。 你的結果沒錯,再確認一下是不是答案錯了。
已知集合A={2,4,6,8,9},B={1,2,3,5,8},又知非空集合C是這樣一個集合:其個元素都加2後,就變成A的一個自己
其個元素都加2後,就變成A的一個子集,若個元素都減去2後,則變成B的一個子集,
即 AB集合中 元素大小相差4的兩元素平均數 且A中元素大於B中元素
即A中取一元素a B中取一元素b a-b=4 則 (a+b)/2屬於C
c={4.7}
(6+2)/2=4
(9+5)/2=7