
所有單列集合的最頂層的接口,裡面定義了是以單列集合共性的方法
任意的單列集合都可以使用Collection接口中的方法
共性方法:
public boolean add(E e): 把給定的對象添加到目前集合當中
傳回值是一個boolean值,一般都傳回true,是以可以不用接收
public void clear(): 清空集合當中是以的元素,但是不删除集合,集合還存在
public boolean remove(E e): 把給定的對象在目前集合中删除
傳回值是一個boolean值,集合中存在元素,删除元素,傳回true
集合不存在元素,删除失敗,傳回false
public boolean contains(E e): 判斷目前集合中是否包含給定的對象
包含傳回true,不包含傳回false
public boolean isEmpty(): 判斷目前集合是否為空。
public int size(): 傳回集合當中元素的個數
public Object[] toArray(): 把集合當中的元素,存到數組中
Iterator接口
疊代器(對集合進行周遊)
常用的方法:
boolean hasNext() 如果有元素可以疊代,則傳回true
判斷集合中還有沒有下一個元素,有傳回true,沒有傳回false
E next() 傳回疊代的下一個元素
取出的集合的下一個元素
Iterator疊代器,是一個接口,我們無法直接使用,需要使用Iterator接口的實作類對象,擷取實作類的方式比較特殊
Collection 接口中有個方法,iterator(),這個方法傳回的就是疊代器的實作類對象
Iterator iterator() 傳回在此collection的元素上進行疊代的疊代器
疊代器的使用步驟:
1.使用集合當中的方法iterator()擷取疊代器的實作類對象,使用Iterator接口接收(多态)
2.使用Iterator接口中的方法hasNext判斷還有沒有下一個元素
3.使用Iterator接口中的方法next取出集合中的下一個元素
疊代器取出集合中元素的代碼,是一個重複的過程
是以我們使用循環優化
不知道集合中有多少元素,使用while循環
循環結束條件,hanNext方法傳回false
public class Demo01Iterator {
public static void main(String[] args) {
Collection<String> coll = new ArrayList<>();
coll.add("姚明");
coll.add("科比");
coll.add("麥迪");
coll.add("詹姆斯");
Iterator<String> it = coll.iterator();
while (it.hasNext()) {
String e = it.next();
System.out.println(e);
}
}
}
增強for循環:底層使用的也是疊代器,使用for循環格式,簡化了疊代器的書寫
Collection<E>extends Iterable<E>:是以的單列集合都可以使用增強for
public interface Iterable<T>實作這個接口允許對象成為"foreach"語句的目标
格式:
for(集合的資料類型 變量名:集合名){
...
}
import java.util.ArrayList;
public class Demo02Foreach {
public static void main(String[] args) {
// 集合的周遊
ArrayList<String> arrayList = new ArrayList<>();
arrayList.add("aaa");
arrayList.add("bbb");
arrayList.add("ccc");
for (String str: arrayList) {
System.out.println(str);
}
// 數組的周遊
int[] arr = {1, 2, 3, 4};
for (int i : arr) {
System.out.println(i);
}
}
}
泛型
package cn.sytest.day10.demo03;
import java.util.ArrayList;
import java.util.Iterator;
public class Demo01Generic {
public static void main(String[] args) {
show02();
}
/*
建立集合對象,使用泛型
好處:
1.避免了類型轉換的麻煩,存儲的是什麼類型,取出的就是什麼類型
2.把運作期異常(代碼運作之後會抛出的異常),提升到了編譯期(寫代碼的時候就會報錯)
弊端:
泛型是什麼類型,隻能存儲什麼類型的資料
*/
private static void show02() {
ArrayList<String> list = new ArrayList<>();
list.add("abc");
Iterator<String> it = list.iterator();
while (it.hasNext()) {
String s = it.next();
System.out.println(s);
}
}
/*
建立集合對象,不使用泛型
好處:
集合不适用泛型,預設的類型就是Object類型,可以存儲任意類型的資料
弊端:
不安全,會引發異常
*/
private static void show01() {
ArrayList list = new ArrayList();
list.add("abc");
list.add(1);
Iterator it = list.iterator();
while (it.hasNext()) {
Object obj = it.next();
System.out.println(obj);
// ClassCastException
String s = (String) obj;
System.out.println(s.length());
}
}
}
定義了一個含有泛型的類,模拟ArrayList集合
泛型是一個未知的資料類型,當我們不确定什麼資料類型的時候,可以使用泛型
泛型可以接收任意資料的類型,可以使用Integer,String,Student
建立對象的時候确定泛型的資料類型
public class GenericClass<E> {
private E name;
public E getName() {
return name;
}
public void setName(E name) {
this.name = name;
}
}
public class Demo02GenericClass {
public static void main(String[] args) {
GenericClass gc = new GenericClass();
gc.setName("隻能說字元串");
Object obj = gc.getName();
// 建立GenericClass對象,泛型使用Integer類型
GenericClass<Integer> gc2 = new GenericClass<>();
gc2.setName(2);
Integer name = gc2.getName();
System.out.println(name);
// 建立GenericClass對象,泛型使用String類型
GenericClass<String> gc3 = new GenericClass<>();
gc3.setName("張三");
String s = gc3.getName();
System.out.println(s);
}
}