集合框架_物件陣列、集合(Collection)、集合(List)總結
阿新 • • 發佈:2018-12-26
1:物件陣列(掌握) (1)陣列既可以儲存基本資料型別,也可以儲存引用型別。它儲存引用型別的時候的陣列就叫物件陣列。 (2)案例: 用陣列儲存5個學生物件,並遍歷陣列。 2:集合(Collection)(掌握) (1)集合的由來? 我們學習的是Java -- 面向物件 -- 操作很多物件 -- 儲存 -- 容器(陣列和StringBuffer) -- 陣列 而陣列的長度固定,所以不適合做變化的需求,Java就提供了集合供我們使用。 (2)集合和陣列的區別? A:長度區別 陣列固定 集合可變 B:內容區別 陣列可以是基本型別,也可以是引用型別 集合只能是引用型別 C:元素內容 陣列只能儲存同一種類型 集合可以儲存不同型別(其實集合一般儲存的也是同一種類型) (3)集合的繼承體系結構? 由於需求不同,Java就提供了不同的集合類。這多個集合類的資料結構不同,但是它們都是要提供儲存和遍歷功能的, 我們把它們的共性不斷的向上提取,最終就形成了集合的繼承體系結構圖。 Collection |--List |--ArrayList |--Vector |--LinkedList |--Set |--HashSet |--TreeSet (4)Collection的功能概述 A:新增功能 boolean add(Object object):新增一個元素。 boolean addAll(Collection c):新增一個集合的元素。 B:刪除功能 vouid clear():移除所有元素。 boolean remove(Object o):移除一個元素。 boolean removeAll(Collection c):移除一個集合的元素。(是一個還是所有) C:判斷功能 boolean contains(Object o):判斷集合中是否包含指定的元素。 boolean containsAll(Collection c):判斷集合中是否包含指定的集合元素。(是一個還是所有) boolean isEmpty():判斷集合是否為空。 D:獲取功能 Iterator<E> iterator():(重點) E:長度功能 int size():元素的個數。 面試題:陣列有沒有length()方法呢?字串有沒有length()方法呢?集合有沒有length()方法呢? 沒有,有,沒有 F:交集(瞭解) boolean retainAll(Collection c):兩個集合都有的元素?思考元素去哪了,返回boolean又是什麼意思呢? G:把集合轉陣列(瞭解) Object[] toArray(): (5)Collection集合的遍歷 A:把集合轉陣列(瞭解) B:迭代器(集合專用方式) (6)迭代器 A:是集合的獲取元素的方式。 B:是依賴於集合而存在的。 C:迭代器的原理和原始碼。 a:為什麼定義為了一個介面而不是實現類? b:看了看迭代器的內部類實現。 (7)Collection集合的案例(遍歷方式 迭代器) 集合的操作步驟: A:建立集合物件 B:建立元素物件 C:把元素新增到集合 D:遍歷集合 A:儲存字串並遍歷 import java.util.Collection; import java.util.ArrayList; import java.util.Iterator; public class CollectionDemo { public static void main(String[] args) { //建立集合物件 Collection c = new ArrayList(); //建立並新增元素 c.add("hello"); c.add("world"); c.add("java"); //遍歷集合 Iterator it = c.iterator(); while(it.hasNext()) { String s =(String) it.next(); System.out.println(s); } } } B:儲存自定義物件並遍歷 public class Student { private String name; private int age; public Student(){} public Student(String name,int age) { this.name = name; this.age = age; } //getXxx()/setXxx() } import java.util.Collection; import java.util.ArrayList; import java.util.Iterator; public class StudentDemo { public static void main(String[] args) { //建立集合物件 Collection c = new ArrayList(); //建立學生物件 Student s1 = new Student("林青霞",27); Student s2 = new Student("風清揚",30); Student s3 = new Student("劉意",30); Student s4 = new Student("武鑫",25); Student s5 = new Student("劉曉曲",16); //新增元素 c.add(s1); c.add(s2); c.add(s3); c.add(s4); c.add(s5); //遍歷集合 Iterator it = c.iterator(); while(it.hasNext()) { Student s = (Student)it.next(); System.out.println(s.getName()+"---"+s.getAge()); } } } 3:集合(List)(掌握) (1)List是Collection的子介面 特點:有序(儲存順序和取出順序一致),可重複。 (2)List的特有功能: A:新增功能 void add(int index,Object object):在指定位置新增元素。 B:刪除功能 Object remove(int index):根據索引刪除元素,返回被刪除的元素。 C:獲取功能 Object get(int index):獲取指定位置的元素。 D:迭代器功能 ListIterator listIterator():List集合特有的迭代器。 E:修改功能 Object set(int index,Object obje):根據索引修改元素,返回被修改的元素。 (3)List集合的特有遍歷功能 A:由size()和get()結合。 B:程式碼演示 //建立集合物件 List list = new ArrayList(); //建立並新增元素 list.add("hello"); list.add("world"); list.add("java"); //遍歷集合 Iterator it = list.iterator(); while(it.hasNext()) { String s =(String) it.next(); System.out.println(s); } System.out.println("----------"); for(int x=0; x<list.size(); x++) { String s =(String) list.get(x); System.out.println(s); } (4)列表迭代器的特有功能;(瞭解) 可以逆向遍歷,但是要先正向遍歷,所以無意義,基本不使用。 (5)併發修改異常 A:出現的現象 迭代器遍歷集合,集合修改集合元素 B:原因 迭代器是依賴於集合的,而集合的改變迭代器並不知道。 C:解決方案 a:迭代器遍歷,迭代器修改(ListIterator) 元素新增在剛才迭代的位置 b:集合遍歷,集合修改(size()和get()) 元素新增在集合的末尾 (6)常見資料結構 A:棧 先進後出 B:佇列 先進先出 C:陣列 查詢快,增刪慢 D:連結串列 查詢慢,增刪快 (7)List的子類特點(面試題) ArrayList 底層資料結構是陣列,查詢快,增刪慢。 執行緒不安全,效率高。 Vector 底層資料結構是陣列,查詢快,增刪慢。 執行緒安全,效率低。 LinkedList 底層資料結構是連結串列,查詢慢,增刪快。 執行緒不安全,效率高。 到底使用誰呢?看需求? 分析: 要安全嗎? 要:Vector(即使要,也不使用這個,後面再說) 不要:ArrayList或者LinkedList 查詢多;ArrayList 增刪多:LinkedList 什麼都不知道,就用ArrayList。 (8)List集合的案例(遍歷方式 迭代器和普通for) A:儲存字串並遍歷 B:儲存自定義物件並遍歷