集合
java.util.Collection 集合-用于存儲一組元素,提供了用于維護集合的相關操作靖榕,它派生了兩個接口标锄,List-可重復集,Set-不可重復集
- boolean add(Object obj) 向集合中添加元素茁计,添加成功返回true
Collection<String> c = new ArrayList<String>();//尖括號中為集合的泛型料皇,基本上每創(chuàng)建一個集合都應該為集合創(chuàng)建一個泛型,其規(guī)定了集合當中
存儲的數(shù)據(jù)類型星压,利于維護和錯誤檢查
c.add("a");c.add("b");c.add("c");
System.out.println(c.add("a"));//true
System.out.println(c);//[a,b,c]
- int size() 返回集合當中元素的個數(shù)践剂。它與數(shù)組的長度length有很大區(qū)別,數(shù)組的長度在聲明數(shù)組時就以固定娜膘,要想超過數(shù)組長度再添加元素必須擴容逊脯。而集合的size表示集合當中元素的具體個數(shù),沒有限制
System.out.println(c.size());//3
- boolean isEmpty() 判斷集合是否為空
System.out.println(c.isEmpty());//false
- void clear() 清空集合元素
c.clear();
System.out.println(c.size());//0
System.out.println(c.isEmpty());//true
- boolean contains(Object obj) 判斷當前集合是否包含某個元素竣贪,判斷的依據(jù)是根據(jù)元素的equals方法比較的結果而定军洼,如果比較結果為true,則視為包含
//先聲明一個Point類演怎,包含x匕争、y兩個成員變量,提供帶參構造爷耀,equals方法等在此不做贅述甘桑,可由eclipse自動生成
Collection<Object> c = new ArrayList<Object>();
c.add(new Point(1,2));
c.add(new Point(3,4));
c.add(new Point(5,6));
System.out.println(c);//[(1,2), (3,4), (5,6)]
Point p = new Point(1,2);
System.out.println("是否包含?"+c.contains(p));//true
- 集合存放元素歹叮,實際存放的是元素的引用
Collection<Point> c = new ArrayList<Point>();
Point p = new Point(1,2);
System.out.println(p);//(1,2)
c.add(p);
System.out.println(c);//[(1,2)]
p.setX(2);
System.out.println(p);//(2,2)
System.out.println(c);//[(2,2)]
- boolean remove(Object obj) 刪除一個集合元素 刪除成功返回true 刪除元素同樣利用元素的equals方法將當前元素與集合中的元素進行比較跑杭,比較結果為true則刪除該元素
Point p = new Point(1,2);
c.remove(p);
System.out.println(c);//[(3,4), (5,6)]
集合的批量操作
- List 有序 可重復集合 Set 無序 不可重復集合
/**
* List 有序 可重復
*/
Collection<String> c1 = new ArrayList<String>();
c1.add("c");
c1.add("c++");
c1.add("Java");
System.out.println("c1:"+c1);//c1:[c, c++, Java]
/**
* Set 無序 不可重復
*/
Collection<String> c2 = new HashSet<String>();
c2.add("Android");
c2.add("ios");
c2.add(".net");
c2.add("Java");
c2.add("ios");
System.out.println("c2:"+c2);//c2:[Java, .net, ios, Android]
- boolean addAll(Collection c) 取并集操作 將一個集合添加到另一個集合中,添加后集合的元素發(fā)生了變化則返回true
boolean flag = c1.addAll(c2);
System.out.println(flag+" "+c1);//true [c, c++, Java, Java, .net, ios, Android] 由于c1為可重復集咆耿,所以會有兩個Java
- boolean containsAll(Collection c) 是否包含一個集合中的全部元素
Collection<String> c3 = new ArrayList<String>();
c3.add("java");
c3.add("android");
boolean isContains = c1.containsAll(c3);
System.out.println("是否全包含艘蹋?"+isContains);//true
- void removeAll(Collection c) 刪除當前集合中兩個集合的共有元素
c1.removeAll(c2);
System.out.println(c1);//[c,c++]
集合的遍歷
Collection提供了統(tǒng)一的集合遍歷方式-迭代器模式
java.util.Iterator是一個接口,規(guī)定了用于遍歷集合的相關方法票灰,不同的集合提供了相應的實現(xiàn)類女阀,無需記住他們的名字宅荤,只將他們當做Iterator即可
遍歷集合遵循:問-取-刪 的原則,其中刪除不是必須操作
- boolean hasNext() 問的過程浸策,該方法判斷集合中是否有元素可以取出
- E next() 取的過程 取出該元素
- void remove() 刪除元素
Iterator<String> it = c.Iteratro();//獲取用于遍歷當前集合的迭代器
while(it.hasNext()){
String str = it.next();
if("c".equals(str)){
it.remove();//在使用迭代器遍歷集合時不要用集合的方式刪除元素c.remove(str),否則會拋出異常
}
System.out.println(str);//a b
}
System.out.println(c);[a,b]
增強型for循環(huán)遍歷集合
for(String str : c){
System.out.println(str);//a b c
}