集合架構,
一:對象數組的概述
數組和集合儲存引用資料類型,存的都是地址值
二:集合的由來及集合繼承體系圖
1.集合的由來
數組長度是固定,當添加的元素超過了數組的長度時需要對數組重新定義,太麻煩,java內部給我們提供了集合類,能儲存任意對象,長度是可以改變的,隨著元素的增加而增加,隨著元素的減少而減少
2.數組和集合的區別
區別1 :
數組既可以儲存基礎資料型別 (Elementary Data Type),又可以儲存引用資料類型,基礎資料型別 (Elementary Data Type)儲存的是值,引用資料類型儲存的是地址值
集合只能儲存引用資料類型(對象)集合中也可以儲存基礎資料型別 (Elementary Data Type),但是在儲存的時候會自動裝箱變成對象
區別2:
數組長度是固定的,不能自動成長
集合的長度的是可變的,可以根據元素的增加而增長
3.數組和集合什麼時候用
如果元素個數是固定的推薦用數組
如果元素個數不是固定的推薦用集合
4.集合繼承體系圖
list和set都是介面
三:Collection集合的準系統測試
1.準系統
boolean add(E e)
add方法如果是List集合一直都返回true,因為List集合中是可以儲存重複元素的;如果是Set集合,當儲存重複元素就會返回false.
boolean remove(Object o)
1 System.out.println(colle.remove(1));//刪除指定元素,可以刪除基礎資料型別 (Elementary Data Type),自動裝箱.2 System.out.println(colle);
void clear()
boolean contains(Object o)
boolean isEmpty()
int size()
2.注意:
collectionXxx.java使用了未經檢查或不安全的操作.
注意:要瞭解詳細資料,請使用 -Xlint:unchecked重新編譯.
java編譯器認為該程式存在安全隱患
溫馨提示:這不是編譯失敗,所以先不用理會,等學了泛型你就知道了
四:集合的遍曆之集合轉數組遍曆
集合的遍曆之集合轉數組遍曆
1.集合的遍曆
其實就是依次擷取集合中的每一個元素。
2.把集合轉成數組,可以實現集合的遍曆
五:Collection集合的帶All功能測試
1.boolean addAll(Collection c)
將c中的每一個元素添加到指定引用中,而add(Collection c)直接將c當做一個元素添加到指定引用中
2.boolean removeAll(Collection c)
刪除的是交集
3.boolean containsAll(Collection c)
判斷調用的集合是否包含傳入的集合
4.boolean retainAll(Collection c)
取交集,如果調用的集合發生改變就返回true,否則返回false.
六:集合的遍曆之迭代器遍曆
1.迭代器的使用
1 List list = new ArrayList(); 2 Student stu; 3 list.add(new Student("張三", 23)); 4 list.add(new Student("李四", 24)); 5 list.add(new Student("王五", 25)); 6 list.add(new Student("趙六", 26)); 7 Iterator<Student> iter = list.iterator();// 擷取迭代器的引用 8 while (iter.hasNext()) {// 集合中的迭代方法(遍曆) 9 System.out.println(iter.next());10 }
前提是要在Student中要重寫toString方法,否則將會調用Object類中的toString方法
2.Collection儲存自訂對象並遍曆
1 Collection coll=new ArrayList();2 coll.add(new Student("張三",23));3 coll.add(new Student("李四",24));4 coll.add(new Student("王五",25));5 Iterator iter=coll.iterator();//擷取迭代器6 while(iter.hasNext()){//判斷集合中是否有元素7 Student stu=(Student)iter.next();//向下轉型8 System.out.println(stu.getName()+"....."+stu.getAge());9 }七:迭代器的原理及源碼解析
1.迭代器原理
迭代器原理:迭代器是對集合進行遍曆,而每一個集合內部的儲存結構都是不同的,所以每一個集合存和取都是不一樣,那麼就需要在每一個類中定義hasNext()和next()方法,這樣做是可以的,但是會讓整個集合體系過於臃腫,迭代器是將這樣的方法向上抽取出介面,然後在每個類的內部,定義自己迭代方式,這樣做的好處有二,第一規定了整個集合體系的遍曆方式都是hasNext()和next()方法,第二,代碼有底層內部實現,使用者不用管怎麼實現的,會用即可
2.迭代器源碼解析
在eclipse中ctrl + shift + t找到ArrayList類
ctrl+o尋找iterator()方法
查看傳回值類型是new Itr(),說明Itr這個類實現Iterator介面
尋找Itr這個內部類,發現重寫了Iterator中的所有抽象方法
八:List集合的特有功能概述和測試
1.List集合的特有功能概述
void add(int index,E element)
E remove(int index)
E get(int index)
E set(int index,E element)
九:List集合儲存學生對象並遍曆
1 List list = new ArrayList(); 2 Student stu; 3 list.add(new Student("張三", 23)); 4 list.add(new Student("李四", 24)); 5 list.add(new Student("王五", 25)); 6 list.add(new Student("趙六", 26)); 7 Iterator<Student> iter = list.iterator();// 擷取迭代器的引用 8 while (iter.hasNext()) {// 集合中的迭代方法(遍曆) 9 System.out.println(iter.next());10 }11 12 for (int i = 0; i < list.size(); i++) {13 stu = (Student) list.get(i);14 System.out.println(stu.getName() + "..." + stu.getAge());15 }十:並發修改異常產生的原因及解決方案
1.需求:我有一個集合,請問,我想判斷裡面有沒有"hello"這個元素,如果有,我就添加一個"world"元素,請寫代碼實現。
1 List<String> list = new ArrayList<String>(); 2 list.add("a"); 3 list.add("b"); 4 list.add("hello"); 5 list.add("c"); 6 list.add("d"); 7 Iterator<String> iter=list.iterator(); 8 String str; 9 while(iter.hasNext()){10 str=(String)iter.next();11 if("hello".equals(str)){12 list.add("world");//這裡會拋出ConcurrentModificationException並發修改異常13 }14 }15 System.out.println(list);
2.ConcurrentModificationException出現
迭代器遍曆,集合修改集合
3.解決方案
a:迭代器迭代元素,迭代器修改元素(ListIterator的特有功能add)
b:集合遍曆元素,集合修改元素
1 List<String> list = new ArrayList<String>(); 2 list.add("a"); 3 list.add("b"); 4 list.add("hello"); 5 list.add("c"); 6 list.add("d"); 7 ListIterator<String> iter = list.listIterator();//如果想在遍曆的過程中添加元素,可以用ListIterator 8 while (iter.hasNext()) { 9 String str = (String) iter.next();10 if ("hello".equals(str)) {11 iter.add("world");12 }13 }14 System.out.println(list);十一:ListIterator
1.boolean hasNext()是否有下一個
2.boolean hasPrevious()是否有前一個
3.Object next()返回下一個元素
4.Object previous();返回上一個元素
十二:Vector的特有功能
1.Vector類特有功能
public void addElement(E obj)
public E elementAt(int index)
public Enumeration elements()
2.Vector的迭代
1 Vector<String> vector = new Vector<String>();// 建立集合對象,List的子類 2 vector.add("a"); 3 vector.add("b"); 4 vector.add("hello"); 5 vector.add("c"); 6 vector.add("d"); 7 Enumeration<String> enu = vector.elements();// 擷取枚舉 8 while (enu.hasMoreElements()) {// 判斷集合中是否有元素 9 System.out.println(enu.nextElement());// 擷取集合中的元素10 }