最近又系統的複習了一下Java集合框架的相關知識,下面我將逐個記錄下這塊的知識。
先講講什麼是對象數組吧
對象數組:數組即可以存儲基本的數據類型,也可以存儲引用類型。它存儲應用類型的時候就叫做對象數組。
首先我們要知道,Java語言是一個面嚮對象語言,我們需要操作很多的對象,所以我們需要存儲這多個對象,我們就需要一些容器
(StringBuffer和數組),但是呢,數組的長度是固定的,不能適應變化的需求,所以java提供了集合供我們使用
集合Collection
1、集合和數組的區別
- 長度區別
- 數組是固定的
- 集合是可變的
- 內容區別
- 數組可以是基本類型,也可以是引用類型
- 集合只能是引用類型
- 元素內容
- 數組只能存儲同一種類型
- 集合可以存儲不同的類型(其實集合一般存儲的也是同一種類型)
2、集合的繼承體系結構
學習集合框架我們一定要清楚集合的繼承體系結構,我相信不少同學都跟我一樣,學完就忘了hhh,來複習一下吧
由於需求的不同,Java給我們提供了不同的集合類,二者多個集合類的數據結構不同,但是它們都是要提供存儲和遍歷功能的
把他們的共性向上提取,最終形成了集合的繼承體系結構
- Collection
- List
- ArrayList
- Vector
- LinkedList
- Set
- HashSet
- TreeSet
- List
上面就是集合的一個總的體系結構
3、Collection是集合的頂層接口,子體系有重複的,有唯一的,有無序的,有有序的
使用步驟:
- 創建集合對象
- 創建元素獨享
- 把元素添加到集合
- 遍歷集合
- 通過集合對象獲取得帶器對象
- 通過迭代器對象的hasNext方法判斷是否有元素
- 通過迭代器對象的next方法獲取元素並移動到下一個位置
功能概述:
添加功能
boolean add(Object obj):添加一個元素
boolean addAll(Collection c):添加一個集合的元素
刪除功能
void clear():移除所有元素
boolean remove(object o):移除一個元素
boolean removeAll(Collection c):移除一個集合的元素
判斷功能
boolean contains(Object c):判斷集合中是否包含指定的元素
boolean containsAll(Collection c):判斷集合中是否包含指定的集合元素(是一個還是所有)
boolean isEmpty(0:判斷集合是否爲空
獲取功能
Iterator<E> iterator() 重點
迭代器,是遍歷集合的一種方式
是依賴於集合存在的
Iterator it = c.iterator()
迭代器方法:hasnext() next()
迭代器爲什麼不定義一個類,而定義一個接口?
假設迭代器定義的是一個類,這樣我們可以創建該類的對象,調用該類的方法來實現集合的遍歷。
但是java中提供了很多的集合類,而這些集合類的數據結構是不同的,所以存儲方式和遍歷方式是不同的。
最終,就沒有定義迭代器類。
而無論你是哪種集合,你都應該具備遍歷或者獲取功能,並且最好在輔助於判斷功能,這樣在獲取前先判斷再獲取,這樣就更不容易出錯。所以判斷和獲取應該是一個集合遍歷所具備的功能,每種集合方式又不太一樣,所以提取出來這兩個功能,並不提供具體實現,這種方式就是接口
那麼真正的具體實現類在哪裏呢?
在真正的具體的子類中,以內部類的方式體現。
長度功能
int size():元素的個數
面試題:數組有沒有length()方法?沒有
字符串有沒有length()方法?有
集合有沒有length()方法?沒有
交集功能
boolean retainAll(Collection c):兩個集合都有的元素?思考元素去哪兒了,返回的boolean又是什麼意思?
7.把集合轉換爲數組
Object[] toArray()
4、Collection集合的案例(遍歷方式 迭代器)
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、存儲自定義對象並遍歷
import java.util.Collection;
import java.util.ArrayList;
import java.util.Iterator;
public class Student{
private String name;
private age;
public Student(){}
public Student(String name,String age){
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public static StudentDemo{
public static void main(String[] args){
Collection c = new Arraylist();
Student s1 = new Student("公孫離",27);
Student s2 = new Student("武則天",24);
Student s3 = new Student("花木蘭",25);
c.add(s1);
c.add(s2);
c.add(s3);
Iterator it = c.iterator();
while(it.hasNext()){
Student s = (Student) it.next();
System.out.println(s)
}
}
}
傳送門:List
傳送門:Set