1. 程式人生 > >java學習筆記(13)

java學習筆記(13)

1:物件陣列(掌握)
(1)陣列既可以儲存基本資料型別,也可以儲存引用型別。它儲存引用型別的時候的陣列就叫物件陣列。
2:集合(Collection)(掌握)
(1)集合的由來?
我們學習的是Java – 面向物件 – 操作很多物件 – 儲存 – 容器(陣列和StringBuffer) – 陣列
而陣列的長度固定,所以不適合做變化的需求,Java就提供了集合供我們使用。
(2)集合和陣列的區別?
A:長度區別
陣列固定
集合可變
B:內容區別
陣列可以是基本型別,也可以是引用型別
集合只能是引用型別
C:元素內容
陣列只能儲存同一種類型
集合可以儲存不同型別(其實集合一般儲存的也是同一種類型)
(3)集合的繼承體系結構?
由於需求不同,Java就提供了不同的集合類。這多個集合類的資料結構不同,但是它們都是要提供儲存和遍歷功能的,
我們把它們的共性不斷的向上提取,最終就形成了集合的繼承體系結構圖。

	Collection
		|--List
			|--ArrayList
			|--Vector
			|--LinkedList
		|--Set
			|--HashSet
			|--TreeSet

(4)Collection的功能概述(自己補齊)
A:新增功能
B:刪除功能
C:判斷功能
D:獲取功能
E:長度功能
F:交集(瞭解)
G:把集合轉陣列(瞭解)
(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:新增功能
B:刪除功能
C:獲取功能
D:迭代器功能
E:修改功能
(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。