關(guān)于Java中的集合
集合是什么,為什么要使用集合?
集合是一種容器,集合只存儲對象,不存儲基本屬類型,集合長度可變。在JDK1.2版本開始,出現(xiàn)了集合框架
?
至于為什么要用集合就涉及到數(shù)據(jù)存儲了。涉及到數(shù)組長度的問題,所以我們比較一下
集合和數(shù)組的區(qū)別:
數(shù)組定長,集合變長
數(shù)組存儲對象,基本類型。
集合只存儲對象
?
//===================================================
2.如何學(xué)習(xí)集合
既然集合是一種容器。必須要掌握如何將對象存儲到集合中,將對象從集合中獲取出來 ,?存儲對象到集合中,以及了解每個集合同期的特點(diǎn)。
//===================================================
3.集合框架中頂層接口Collection
(目前是,貌似后面的java工程師又給加了Iterable接口。反正不影響)
集合中的方法很多有以下幾種;
? ?add(Object e) 將對象存儲到集合的方法 (最基本的存取方法)
? ?參數(shù)是Object類型,集合存儲對象,存儲什么對象不一定
? ?addAll(Collection c)將一個集合存儲到另一個集合
? ?存儲的是另一個集合中存儲的對象
? ?clear()清除集合中存儲的所有對象
? ?boolean contains(Object o)判斷一個對象,是否存在于集合中
? ?集合中是否包含這個對象
? ?boolean containsAll(Collection c)判斷一個集合,是否包含另一個集合
? ?其實(shí)判斷的是兩個集合中存儲的對象是否完全包含
? ?int size()返回集合中存儲對象的個數(shù)
? ?數(shù)組.length屬性
? ?字符串.length()方法
? ?集合.size()方法
? ?boolean isEmpty()當(dāng)集合中的元素的size()==0 結(jié)果返回真
? ?boolean remove(Object o)移除集合中的一個對象,如果移除成功返回真
? ?boolean removeAll(Collection c)移除兩個集合中,相同的對象
? ?boolean retainAll(Collection c)兩個集合取交集
? ?將coll和coll2兩個集合中相同的對象,保存到coll中,不相同的就舍棄不要
? ?boolean b = coll.retainAll(coll2);
? ?返回值:調(diào)用者coll集合沒有變化過,結(jié)果就是false
? ?調(diào)用者coll發(fā)生了變化,就是true
我就不貼代碼演示了。在取的過程中會貼代碼。畢竟有存才能取啊。至于其他方法知道就OK。忘記的話可以查API
//===================================================
4.集合中的存儲對象的取出。
??就是取出集合中存儲對象的一種方式,遍歷數(shù)組很像。我們這里用的是迭代器
? iterator方法,寫在了Collection接口中,所有的小弟都具備這個方法
? Iterator iterator()
? Iterator 接口,迭代器接口 iterator返回的是接口的實(shí)現(xiàn)類的對象
? hasNext()判斷集合中還有沒有可以被取出對象,如果有就返回真
? next()獲取集合中存儲的對象
? 使用迭代器取出集合中存儲對象的步驟:
? ? 第一步,使用集合中的方法iterator()獲取Iterator接口對象(內(nèi)部類對象),獲取迭代器
? ? 第二步,使用迭代器對象的hasNext()方法判斷集合中,有沒有對象可以被取出
? ? 第三步,使用迭代器對象的next()方法,獲取集合中對象
/*
?* 使用迭代器獲取集合中存儲對象
?* 迭代器創(chuàng)建好,可以使用一次
?*/
import java.util.*;
public class CollectionDemo1 {
?public static void main(String[] args) {
? Collection coll = new ArrayList();
? coll.add("abc1");
? coll.add("abc2");
? coll.add("abc3");
?
? //獲取迭代器對象,使用集合方法iterator()
? Iterator it = coll.iterator();
? //判斷集合中是否有對象可以被取出 迭代器方法hasNext()
? while(it.hasNext()){
? ?//使用迭代器方法Object next()獲取集合中存儲的對象
? ?Object obj = it.next(); //it.next只能使用一次。
? ?System.out.println(obj);
? }????
?}
}
? 使用迭代器的過程中,出現(xiàn)了一個異常
? java.util.ConcurrentModificationException--并發(fā)修改異常
? 在迭代器迭代集合的過程中,不能使用集合的方法,改變集合的長度?add
remove clrea
? 當(dāng)?shù)饕呀?jīng)移動到了最后一位,再次使用next方法獲取,出現(xiàn)
? Exception in thread "main" java.util.NoSuchElementException--沒有元素被取出異常
it.nxet就像當(dāng)于指針的移動。每次使用就會像下移動。所以一次判斷過程中。對于一個集合對象只能使用一次。這個一定要記住。而且迭代過程中不能改變長度。但是內(nèi)容是可以的
迭代器中一共就3個方法。
hasNext()
next()
還有一個方法remove()
/*
?* 迭代器一個集合
?* 如果集合中有abc2這個對象,請你刪除它
?* 迭代器中的一個方法remove
?*
?* 如果集合中有abc2這個對象,請你添加一個haha
?*/
import java.util.*;
public class CollectionDemo2 {
?public static void main(String[] args) {
? Collection coll = new ArrayList();
? coll.add("abc2");
? coll.add("abc4");
? coll.add("abc4");
? coll.add("abc1");
? coll.add("abc3");
? coll.add("abc3");
?
? //獲取迭代器,使用集合iterator
? Iterator it = coll.iterator();
? while(it.hasNext()){
? ?//迭代過程中,如何判斷是否存在abc2對象
? ?Object obj = it.next();
? ?if("abc2".equals(obj))
? ? it.remove();
? ?//it.remove方法,移除的是哪一個對象呢,迭代到的是誰,就移除誰
? ?System.out.println(obj);
? }
?
? System.out.println(coll);
?}
}
? ? ? ? ? ? ? ?