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:添加功能
B:删除功能
C:判斷功能
D:擷取功能
E:長度功能
F:交集(了解)
G:把集合轉數組(了解)
(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:添加功能
B:删除功能
C:擷取功能
D:疊代器功能
E:修改功能
(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:存儲自定義對象并周遊