java的集合框架java
-
java.util.Collection接口
1.Collection:是全部集合的頂級接口,裏面規定了集合操做元素的相關功能方法集合與數組同樣,用於存儲一組元素,可是集合又多個不一樣的實現類來實現不一樣的數據結構
android -
Collection下面有兩個常見的子接口
*1.1 java.util.List: *線性表,特色:能夠存放重複元素而且有序,能夠經過下標操做
List常見的實現類:
1.1.1:java.util.ArraysList
內部使用數組實現,查詢性能更好
1.1.2java.util.LinkedList
內部用鏈表實現,增刪元素性能更好,首尾增刪元素性能最佳
1.2: java.util.Set:不能夠重複的集合,而且無序
Set常見的實現類:java.util.HashSet
ios -
這裏的重複元素斷定是依靠元素自身equals方法比較的結果而定c++
Collection c = new ArrayList();
boolean add(E e):向當前集合添加一個元素,成功添加後返回true不然返回false
數組
c.add("one");
int size():返回當前集合的元素個數安全
int size = c.size();
boolean isEmpty():判斷集合是否爲空集,當集合的size爲0時,isEmpty返回true數據結構
boolean isEmpty = c.isEmpty();
c.clear():清空集合框架
boolean contains(Object o):判斷當前集合是否包含給定元素
集合的contains判斷包含時的依據爲:給定元素是否與集合中現有的元素存在equals比較爲true的狀況,存在則認爲包含
工具
boolean contains = c.contains(p);
remove方法刪除元素時也是刪除與集合中equals比較爲true的,元素對於List集合而言,重複元素僅刪除一次性能
c.remove(p);
集合只能存放引用類型元素,而且存放的是元素的引用(地址)
Point p = new Point(1,2); c.add(p); p.setX(2); //修改p的第一個參數爲2:(2,2)
boolean addAll(Collection c):將給定集合中的全部元素添加到當前集合
Collection c1 = new ArrayList(); c1.add("java"); c1.add("c++"); Collection c2 = new ArrayList(); c2.add("android"); c2.add("ios"); c1.addAll(c2);
boolean containsAll(Collection e):判斷當前集合是否包含給定集合中的全部元素
Collection c3 = new ArrayList(); c3.add("java"); boolean contains = c1.containsAll(c3);
removerAll:刪除當前集合中與給定集合的共有元素
c1.removeAll(c3);
集合的遍歷
- Collection提供了一個方法
- Iterator iterator()
- 該方法會返回一個用於遍歷當前集合的迭代器實現類,使用它能夠對集合進行遍歷
java.util.Iterator接口:迭代器
- 迭代器中規定了遍歷集合元素所須要的相關方法,使用迭代器遍歷遵循的原則爲:問,取,刪,其中刪除元素不是遍歷過程當中的必要操做
- 注:不一樣的集合實現類都提供l一個用於遍歷自身的迭代器實現類,咱們不須要知道它們的名字,用多態的思想把它們當作Iterator進行操做便可.
JDK5推出時推出了一個新特性:泛型
泛型又稱爲參數實例化類型,容許咱們咱們在使用一個類型的時候去指定它裏面某些屬性或方法的參數和返回值的類型,使得咱們使用這個類時更符合咱們的需求
泛型在集合中被大量使用,用於規定集合中的元素類型
Collection<String> c = new ArrayList<>(); c.add("one"); c.add("#"); c.add("two"); c.add("#"); c.add("three"); System.out.println(c); // 迭代器也支持泛型,使用時指定的類型與集合元素類型一致便可 Iterator<String> it = c.iterator(); // boolean hasNext():判斷集合是否還有元素能夠迭代 while (it.hasNext()){ // E next():獲取集合下一個元素(第一次調用時獲取第一個元素,以此類推) String str = it.next(); System.out.println(str); if ("#".equals(str)){ /* 迭代器有一個要求,在遍歷的過程當中不能經過集合的方法 增刪元素,不然會出現異常 */ /* 迭代器提供的remover方法能夠刪除本次遍歷出來的元素 */ it.remove(); } }
java.util.List接口:
List list = new ArrayList<>();
E get(int index):獲取指定下標所對應的元素
E set(int index,E e):將給定元素設置到指定位置,返回值爲該位置原有元素
void add(int index,E e):將給定元素添加到指定位置,原位置及後續元素順序向後移動
list.add(2,"3");
E remove(int index):刪除並返回指定位置的元素
String old = list.remove(3);
List subList(int start,int end): 獲取當前集合指定範圍內的子集
List<Integer> list = new ArrayList<>(); for(int i=0;i<10;i++){ list.add(i); } System.out.println(list); List<Integer> subList = list.subList(3,8); System.out.println(subList); //將子集每一個元素擴大10倍 for (int i=0;i<subList.size();i++){ int a = subList.get(i); int b = a*10; subList.set(i,b); } System.out.println(subList); *//* 當咱們經過一個List集合獲取到一個子集後,對這個子集的任何操做 就是對原集合這段元素的操做 *//* System.out.println(list);
加強型for循環 JDK5推出時推出的一個新特性
- 它也稱爲:加強for循環
- 新循環不取代傳統的for循環的工做,它只是用相同的語法去遍歷集合或數組使用
- 新循環是編譯器承認,而不是java虛擬機承認,編譯器在編譯源代碼時發現使用新循環遍歷數組時,會將代碼改成普通的for循環進行
- 新循環遍歷集合會被編譯器修改成迭代器遍歷 所以在使用新循環遍歷過程當中,仍然不能經過集合的方法增刪元素
集合轉換爲數組:Collection提供了一個方法:toArray(),能夠將當前集合轉換爲一個數組
將當前集合轉換爲數組,該方法要求傳入一個數組,若是該數組能夠用(數組長度>=集合的size時)會將當前集合元素存入該數組後再將該數組返回
若是不能夠用會建立一個與參數數組同類型而且長度與size一致的數組並將元素存放後返回
Collection<String> c = new ArrayList<>(); //集合 String[] array = c.toArray(new String[c.size()]); //數組
數組轉換爲集合:數組的工具類:Arrays提供了一個靜態方法:asList,能夠將一個數組轉換爲一個List集合
-
經過數組轉化而來的集合,對該集合的元素操做就是對原數組的操做這一點須要特別注意!
-
因爲數組是定長的,所以從從數組轉換的集合不能夠調用增刪元素等會影響數組的長度,不然會拋出異常:UnsupportedOperationException
若是想向集合中增刪元素,須要執行建立一個集合,而後將原集合元素導入到該集合便可
全部的集合元素都支持一個參數類型爲Collection的構造方法,做用是在建立當前集合的同時包含給定集合中的全部元素
String[] array = {「one」,「two」,「three」,「four」,「five」}; //數組
List list = Arrays.asList(array); //集合
Collection和Collections的區別
**Collection:**是全部集合的頂級接口,規定了全部集合都要具有的功能。集合與數組同樣,用於保存一組元素,可是實現類衆多(有多種不一樣的數據結構) **Collections:**是個一個工具類,提供了一系列的靜態方法來輔助容器操做,這些方法包括對容器的搜索、排序、線程安全化等等。