1. 程式人生 > >java筆記2——集合Collection

java筆記2——集合Collection

目錄

三、集合

一、為什麼會有集合?陣列不能滿足使用嗎?       

首先Java是面向物件的語言,需要通過物件體現。為了方便對多個物件進行操作,我們需要儲存多個物件的容器。

目前學過的容器有StringBuffer和陣列。但是StringBuffer的結果是字串,無法滿足全部需求。而陣列不能夠適應我們變化的需求,因為陣列的長度是固定的。這個時候Java就提供了集合。

二、陣列和集合的區別

         A:長度區別

                   陣列的長度固定

                   集合的長度可變化

         B:內容區別

                   陣列只能儲存一種型別的元素

                   集合可以儲存不同型別的元素

         C:元素的資料型別區別

                   陣列能儲存基礎型別和引用型別

                   集合只能儲存引用型別

三、集合

首先,針對不同的儲存需求,Java提供了很多集合類。這些集合有共性,但是資料結構(資料的儲存方式)的不同。通過提取集合共性,就形成了集合的繼承體系。

                                                   集合體系圖

Collection:集合的頂層介面,它的子體系有重複的,有唯一的,有無序的,有有序的

1)Collection的功能概述:

新增功能:

boolean add(E e) :新增一個指定元素

boolean addAll(Collection<? extends E> c):新增一個集合的元素

                             刪除功能:

                                               void clear() :清除所有元素

                                               boolean remove(Object o) :移除一個元素

                                               boolean removeAll(Collection<?> c):移除一個集合的元素

                             獲取功能:

                                              Iterator<E> iterator() :進行元素的遍歷

                             判斷功能:

                                             boolean contains(Object o) :判斷集合是否包含指定元素

                                             boolean containsAll(Collection<?> c) :判斷是否包含指定的集合元素

                                             boolean isEmpty():判斷集合是否為空

                             長度功能:

                                             int size():元素的個數(集合沒有length()方法)

                             交集功能:

                                             boolean retainAll(Collection<?> c)

                             把集合轉換成陣列:

                                             Object[] toArray()

2)Collection介面的實現:

因為Collection是一個介面類,因此不能例項化。所以:

Collection c=new Collection(); 是錯誤的

那麼介面如何例項化呢?通過他的子類的具體實現類進行建立:

                                                        Collection c=new ArrayList();

3)Collection集合的高階功能的測試:

boolean addAll(Collection<? extends E> c):新增一個集合的元素

boolean removeAll(Collection<?> c):移除一個集合的元素

只要有一個元素(不必所有)就返回true

boolean containsAll(Collection<?> c) :判斷是否包含指定的集合元素

只有包含所有元素,才叫包含,返回true

boolean retainAll(Collection<?> c)

假設有A,B兩個集合,A對B做交集,交集的結果儲存在A中,B不變,如果A發生了變化則返回true,否則返回false

4)Collection集合的遍歷(依次獲取集合中元素)

// 建立集合物件
		Collection c = new ArrayList();

		// 新增元素
		c.add("hello"); // Object obj = "hello"; 向上轉型
		c.add("world");
		c.add("java");

		// 遍歷
		// Object[] toArray():把集合轉成陣列,可以實現集合的遍歷
		Object[] objs = c.toArray();
		for (int x = 0; x < objs.length; x++) {
			
	   // System.out.println(objs[x] + "---" + objs[x].length());
       //上面的實現不了,原因是objs是一個Object物件,而Object中沒有length()方法
	   // 我們要想使用字串的方法(輸出元素的長度),就必須把元素還原成字串
		   // 向下轉型(obj->String)
			String s = (String) objs[x];
			System.out.println(s + "---" + s.length());
		}

利用迭代器遍歷(集合專用遍歷方式)

Collection c=new ArrayList();
		c.add("hello");
		c.add("world");
		c.add("java");
		//迭代器遍歷
		Iterator it=c.iterator();
        //判斷下一個元素是否存在
		while (it.hasNext()) {
			System.out.println(it.next());
		}

注:boolean hasNext()

          如果仍有元素可以迭代,則返回 true。

           E next()

          返回迭代的下一個元素。

利用for迴圈改寫while,因為效率高

for(Iterator it = c.iterator();it.hasNext();){
			System.out.println(it.next());
		}

自定義物件的遍歷,注意點,迭代器的使用

正確寫法:

Collection c=new ArrayList();
		
		Student s1=new Student("花無缺",12);
		Student s2=new Student("小魚兒",14);
		Student s3=new Student("小仙女",13);
		
		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.getName()+"---"+s.getAge());
		}

易錯點:

while(it.hasNext()){
System.out.println(((Student)it.next()).getName()+"--"+((Student)it.next()).getAge());
		}

產生的錯誤:java.util.NoSuchElementException  原因是每一個it.next()都是下一個集合元素,

假如集合元素是奇數個,就會報出這個異常,因此一次迴圈,不能多次使用it.next()方法,每一次使用都訪問下一個物件。

5)集合的使用步驟

A:建立集合物件

B:建立集合元素物件

C:新增元素到集合中

D:遍歷集合

                             a:通過集合物件獲取迭代器物件

                             b:通過迭代器物件的hasNext()方法判斷元素是否存在

                             c:通過迭代器物件的next()方法獲取元素並移動到下一個物件