1. 程式人生 > >集合框架_物件陣列、集合(Collection)、集合(List)總結

集合框架_物件陣列、集合(Collection)、集合(List)總結

1:物件陣列(掌握)
	(1)陣列既可以儲存基本資料型別,也可以儲存引用型別。它儲存引用型別的時候的陣列就叫物件陣列。
	(2)案例:
		用陣列儲存5個學生物件,並遍歷陣列。

2:集合(Collection)(掌握)
	(1)集合的由來?
		我們學習的是Java -- 面向物件 -- 操作很多物件 -- 儲存 -- 容器(陣列和StringBuffer) -- 陣列
		而陣列的長度固定,所以不適合做變化的需求,Java就提供了集合供我們使用。
	(2)集合和陣列的區別?
		A:長度區別
			陣列固定
			集合可變
		B:內容區別
			陣列可以是基本型別,也可以是引用型別
			集合只能是引用型別
		C:元素內容
			陣列只能儲存同一種類型
			集合可以儲存不同型別(其實集合一般儲存的也是同一種類型)
	(3)集合的繼承體系結構?
		由於需求不同,Java就提供了不同的集合類。這多個集合類的資料結構不同,但是它們都是要提供儲存和遍歷功能的,
		我們把它們的共性不斷的向上提取,最終就形成了集合的繼承體系結構圖。
		
		Collection
			|--List
				|--ArrayList
				|--Vector
				|--LinkedList
			|--Set
				|--HashSet
				|--TreeSet
	(4)Collection的功能概述
		A:新增功能
			boolean add(Object object):新增一個元素。 
		    boolean addAll(Collection c):新增一個集合的元素。 
		B:刪除功能
			vouid clear():移除所有元素。 
	         boolean remove(Object o):移除一個元素。 
	          boolean removeAll(Collection c):移除一個集合的元素。(是一個還是所有) 
		C:判斷功能
			boolean contains(Object o):判斷集合中是否包含指定的元素。 
	       	boolean containsAll(Collection c):判斷集合中是否包含指定的集合元素。(是一個還是所有) 
	        boolean isEmpty():判斷集合是否為空。 
		D:獲取功能
			Iterator<E> iterator():(重點) 	
		E:長度功能
			int size():元素的個數。 
       		面試題:陣列有沒有length()方法呢?字串有沒有length()方法呢?集合有沒有length()方法呢? 
	                沒有,有,沒有 	
		F:交集(瞭解)
			boolean retainAll(Collection c):兩個集合都有的元素?思考元素去哪了,返回boolean又是什麼意思呢? 
		G:把集合轉陣列(瞭解)
			Object[] toArray(): 
	(5)Collection集合的遍歷
		A:把集合轉陣列(瞭解)
		B:迭代器(集合專用方式)
	(6)迭代器
		A:是集合的獲取元素的方式。
		B:是依賴於集合而存在的。
		C:迭代器的原理和原始碼。
			a:為什麼定義為了一個介面而不是實現類?
			b:看了看迭代器的內部類實現。
	(7)Collection集合的案例(遍歷方式 迭代器)
		集合的操作步驟:
			A:建立集合物件
			B:建立元素物件
			C:把元素新增到集合
			D:遍歷集合
	
		A:儲存字串並遍歷
			import java.util.Collection;
			import java.util.ArrayList;
			import java.util.Iterator;
			
			public class CollectionDemo {
				public static void main(String[] args) {
					//建立集合物件
					Collection c = new ArrayList();
					
					//建立並新增元素
					c.add("hello");
					c.add("world");
					c.add("java");
					
					//遍歷集合
					Iterator it = c.iterator();
					while(it.hasNext()) {
						String s =(String) it.next();
						System.out.println(s);
					}
				}
			}
		
		B:儲存自定義物件並遍歷
			public class Student {
				private String name;
				private int age;
				
				public Student(){}
				
				public Student(String name,int age) {
					this.name = name;
					this.age = age;
				}
				
				//getXxx()/setXxx()
			}
			
			import java.util.Collection;
			import java.util.ArrayList;
			import java.util.Iterator;
			
			public class StudentDemo {
				public static void main(String[] args) {
					//建立集合物件
					Collection c = new ArrayList();
					
					//建立學生物件
					Student s1 = new Student("林青霞",27);
					Student s2 = new Student("風清揚",30);
					Student s3 = new Student("劉意",30);
					Student s4 = new Student("武鑫",25);
					Student s5 = new Student("劉曉曲",16);
					
					//新增元素
					c.add(s1);
					c.add(s2);
					c.add(s3);
					c.add(s4);
					c.add(s5);
					
					//遍歷集合
					Iterator it = c.iterator();
					while(it.hasNext()) {
						Student s = (Student)it.next();
						System.out.println(s.getName()+"---"+s.getAge());
					}
				}
			}

3:集合(List)(掌握)
	(1)List是Collection的子介面
		特點:有序(儲存順序和取出順序一致),可重複。
	(2)List的特有功能:
		A:新增功能
			void add(int index,Object object):在指定位置新增元素。 
		B:刪除功能
			Object remove(int index):根據索引刪除元素,返回被刪除的元素。
		C:獲取功能
			Object get(int index):獲取指定位置的元素。 
		D:迭代器功能
			ListIterator listIterator():List集合特有的迭代器。
		E:修改功能
			Object set(int index,Object obje):根據索引修改元素,返回被修改的元素。 
	(3)List集合的特有遍歷功能
		A:由size()和get()結合。
		B:程式碼演示
					//建立集合物件
					List list = new ArrayList();
					
					//建立並新增元素
					list.add("hello");
					list.add("world");
					list.add("java");
					
					//遍歷集合
					Iterator it = list.iterator();
					while(it.hasNext()) {
						String s =(String) it.next();
						System.out.println(s);
					}
					System.out.println("----------");
					
					for(int x=0; x<list.size(); x++) {
						String s =(String) list.get(x);
						System.out.println(s);
					}
	(4)列表迭代器的特有功能;(瞭解)
		可以逆向遍歷,但是要先正向遍歷,所以無意義,基本不使用。
	(5)併發修改異常
		A:出現的現象
			迭代器遍歷集合,集合修改集合元素
		B:原因
			迭代器是依賴於集合的,而集合的改變迭代器並不知道。
		C:解決方案
			a:迭代器遍歷,迭代器修改(ListIterator)
				元素新增在剛才迭代的位置
			b:集合遍歷,集合修改(size()和get())
				元素新增在集合的末尾
	(6)常見資料結構
		A:棧 先進後出
		B:佇列 先進先出
		C:陣列 查詢快,增刪慢
		D:連結串列 查詢慢,增刪快
	(7)List的子類特點(面試題)
		ArrayList
			底層資料結構是陣列,查詢快,增刪慢。
			執行緒不安全,效率高。
		Vector
			底層資料結構是陣列,查詢快,增刪慢。
			執行緒安全,效率低。
		LinkedList
			底層資料結構是連結串列,查詢慢,增刪快。
			執行緒不安全,效率高。
			
		到底使用誰呢?看需求?
		分析:
			要安全嗎?
				要:Vector(即使要,也不使用這個,後面再說)
				不要:ArrayList或者LinkedList
					查詢多;ArrayList
					增刪多:LinkedList
					
		什麼都不知道,就用ArrayList。
	(8)List集合的案例(遍歷方式 迭代器和普通for)
		A:儲存字串並遍歷
		B:儲存自定義物件並遍歷