<small>
集合的概念
集合:裝有不同類型的數(shù)據(jù)集合
數(shù)組:同一類型的數(shù)據(jù)集合
People[] peo=new People[10];
Dog[] dogs=new Dog[10];
要使得兩者混裝 可以父類 Object
Object[] objs=new Object[20];
但是這種方法有弊端
無(wú)法快速得到所要的元素
而且每次使用元素是,都必須將元素強(qiáng)轉(zhuǎn)成對(duì)應(yīng)的類型
Collection
Collection 表示一組對(duì)象,這些對(duì)象也稱為 collection 的元素。一些 collection 允許有重復(fù)的元素,而另一些則不允許。一些 collection 是有序的,而另一些則是無(wú)序的。JDK 不提供此接口的任何直接 實(shí)現(xiàn):它提供更具體的子接口(如 Set 和 List)實(shí)現(xiàn)。此接口通常用來(lái)傳遞 collection,并在需要最大普遍性的地方操作這些 collection。
List: 允許添加重復(fù)的元素,添加的元素與輸出的元素順序一致
Set:不允許添加重復(fù)的元素,添加的元素與輸出的元素順序不一致
Queue:添加的元素遵循先進(jìn)先出的原則
Deque:添加的元素遵循先進(jìn)后出的原則
可以通過(guò)向上造型實(shí)例化
Collection col=new List();
List list=new ArrayList()
可以簡(jiǎn)化為:Collection col=new ArrayList;
ArrayList 是 List 接口的實(shí)現(xiàn)類
List又是 Collection 的子接口
類似的實(shí)現(xiàn)類可以參見 API
Collection 方法介紹
1、單元素操作
a、添加
boolean add()
可以添加 Object 元素,返回 boolean 值,可以添加任何類型的數(shù)據(jù)
col.add(1);//Integer
col.add("二");//String
col.add(new People("張三"));
返回添加成功的 true一般不用
b、判斷集合中是否包含某個(gè)元素
比較兩個(gè)對(duì)象的值是否相同明,不是比較地址,即 contains 的底層實(shí)現(xiàn)是通過(guò) equals 來(lái)判斷的
boolean isContains=col. contains("二");//true
boolean isContains=col.comtains(new People("張三"));//false
想要 people 類型也為 true 需要重寫 people 類中的 equals 方法
c、從集合中移除指定元素
boolean remove(Object obj);
boolean isRemoveOK=col.remove("二");
d、清空集合元素
void clear()
col.clear()//[]
e、判斷集合是否為空集合
boolean isEmpty=col.isEmpty();
f、獲得集合中的元素個(gè)數(shù)
int size();
col.size()
2、元素批量操作
Collection col1 = new ArrayList();
col1.add("java");
col1.add("PHP");
col1.add("C#");
System.out.println("col1:"+col1);
a、元素批量添加
boolean addAll(Collection col)
將集合col 中的元素全部添加到另一個(gè)集合中
Collection col2 = new HashSet();
boolean addAllOk = col2.addAll(col1);
System.out.println("col2:"+col2);
b、元素批量包含
containsAll(Collectioncol)
col2.add();
col2.add(".NET")
boolean isContainsAll =new cols.containsAll(col1)
c、批量刪除集合元素
boolean removeAll (Collection col)
boolean isRemoveAll=col2.
d、retainAll(Collection col)
僅僅保留某個(gè)集合的元素
3、元素的使用
Collection col = new ArrayList();
col1.add("java");
col1.add("PHP");
col1.add("C#");
System.out.println("col1:"+col1)
Collection 集合中沒法獲得單個(gè)元素
通過(guò)循環(huán)操作也不能實(shí)現(xiàn)集合元素的操作
col[i]//這種表示是錯(cuò)誤的
迭代器
因?yàn)?collection 集合接口沒法通過(guò)自身的方法是實(shí)現(xiàn)元素的獲取及使用,只能依靠迭代器進(jìn)行集合元素遍歷,然后獲得使用
迭代器,可以通過(guò)集合獲得,然后對(duì)迭代器驚醒循環(huán)讀取,最終獲得
1、從集合中得到迭代器對(duì)象
Iterator iterator=col.iterator()
返回迭代器對(duì)象,其中包含集合中所有元素內(nèi)容
2、對(duì)迭代器驚醒遍歷,兵從迭代器中獲得元素
迭代器遍歷步驟:?jiǎn)枴⑷?、刪(不是必要的)
interator.hasNext()如果含有則返回 true
iterator.next()取出的是迭代器中所被問(wèn)及的是否含有的那個(gè)元素
取出數(shù)據(jù)類型是 Object
刪除是當(dāng)前循環(huán)中取出的元素
注意:a、問(wèn)是必要的,刪必須在取之后
b、在迭代過(guò)程中不允許對(duì)集合元素驚醒增、刪操作,不允許改變集合中元素的個(gè)數(shù)。
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class Test1 {
public static void main(String[] args) {
Collection col=new ArrayList();
col.add(1);
col.add("Jack");
col.add(2);
Iterator itera=col.iterator();
while(itera.hasNext()){
Object obj=itera.next();
System.out.println(obj);
if(obj.toString().equals("2")){
itera.remove();
System.out.println(col);
}
}
}
}
增強(qiáng) for 循環(huán),又名新循環(huán)
JDK1.5之后的新特性
此循環(huán)就是為了方便數(shù)組,集合元素的遍歷
注意:引用類型就是數(shù)組元素,集合中元素的類型
引用就是當(dāng)前循環(huán)中獲得的元素
增強(qiáng) for 循環(huán)的注意事項(xiàng):
在增強(qiáng) for 循環(huán)中不允許對(duì)集合元素進(jìn)行操作
結(jié)論:增強(qiáng) for 循環(huán)的底層實(shí)現(xiàn),就是對(duì)迭代器的封裝
語(yǔ)法:for(引用類型 引用:數(shù)組或者集合){
循環(huán)中直接對(duì)引用進(jìn)行操作
}
public class NewForDemo03 {
public static void main(String[] args) {
//創(chuàng)建一個(gè)數(shù)組
People[] peos = new People[10];
//對(duì)數(shù)組遍歷:
//方式一:普通for循環(huán)可以(略)
//方式二:增強(qiáng)for循環(huán)
for(People peo : peos){
//每次循環(huán),peo就表示當(dāng)前循環(huán)獲得的元素。
}
/*
* 創(chuàng)建集合
*/
Collection col = new ArrayList();
col.add("java");
col.add("php");
col.add("c");
//對(duì)集合的遍歷:
//方式一:借助于迭代器(略)
//方式二:增強(qiáng)for循環(huán)
for(Object obj : col){
//每次循環(huán),obj就表示當(dāng)前循環(huán)獲得的元素。
System.out.println(obj);
/*
* 在增強(qiáng)for循環(huán)中,無(wú)法實(shí)現(xiàn)對(duì)集合的增刪操作。
*/
// col.add("c#");
// col.remove("c");
}
}
}
class People{
}