【Java基礎】--Java容器剖析:collection容器

ZeroWM發表於2015-10-14


背景:

       起初,Java應該先有的陣列。陣列是一種高效儲存和隨機訪問物件引用序列的方式,在效率和型別檢查方面很有優勢,但是當建立一個陣列物件的時候,陣列的大小也就固定了。為了滿足想要多少分配空間,就能佔多少,容器就誕生了~~

 

概念:

Java API所提供的一系列類的例項,用於在程式中存放物件。下圖是容器的API框架圖:

 

JDK提供的容器:

  Set:資料物件無序,不可重複

  List:資料物件有序  ,可重複

       附:重複就是通過equals方法對比的結果 

  Map:介面定義了儲存“鍵(key)-值(value)對映對”的方法。


Collection介面:

Collection介面定義了儲存的一組物件的方法,其子介面Set和List分別細化了儲存的方式。

Demo程式碼:

例項化一個ArrayList物件,實現父Collection介面,通過add方法新增兩個元素,並列印c容器的大小和內容。

import java.util.*;
	public class Main {
		public static void main(String[] args) {
			Collection c=new ArrayList();//父類Collection例項化一個子類物件ArrayList
 			//可以放入不同的物件。 
			c.add("hello");
			c.add(new Integer(100));
			System.out.println(c.size());
		        System.out.println(c);
 		}
	
}


注意:

為啥要寫Collection c=new ArrayList();父類指向子類的介面,這樣例項化的物件裡面只擁有父類方法的具體實現。假如根據需要,不例項化ArrayList了,改成LinkList了,只需要修改ArrayList出即可使用,體現了程式碼的靈活性。


輸出結果:


Collection Remove程式碼:

跟上面的程式碼比,新增了remove方法的使用,呼叫Collection的add方法後移除remove,輸出操作後的結果。

	import java.util.*;
	public class Main {
		public static void main(String[] args) {
			Collection c=new HashSet();
			//可以放入不同的物件。 
			c.add("hello");
			c.add(new Name("f1","l1"));
			c.add(new Integer(100));
                        //新新增移除remove方法
                        c.remove("hello");
			c.remove(new Integer (100)); //移除的時候,有一個equals的對比。
			System.out.println(c.remove(new Name("f1","l1")));
			System.out.println(c);
		}
		
		
	
	}
	
	class Name{
		private String firstName,lastName;
		public Name(String firstName,String lastName){
			this.firstName=firstName;
			this.lastName=lastName;
		}
		public String getFirstName(){return firstName;}
		public String getLashName(){return lastName;}
		public String toString(){return firstName + " " + lastName;}
		
		public boolean equals(Object obj){
			if(obj instanceof Name){
				Name name=(Name) obj;
				return (firstName.equals(name.firstName)) &&(lastName.equals(name.lastName));
				
			}
			return super.equals(obj);
		}
		public int hashCode(){
			return firstName.hashCode();
		}
	
	}

輸出結果:




在作為索引的時候,重寫equals的時候要重寫hashcode.


Iterator介面:


Iterator就是一個統一遍歷Collection所有元素的方法。

1所有實現了Collection介面的容器類都有一個iterator方法用以返回一個實現了Iterator介面的物件。

2、Iterator物件稱作迭代器,用以方便的實現對容器元素的遍歷實現。

3、Iterator實現了下列方法:



Iterator例項程式碼:

		import java.util.*;
		public class Main {
			public static void main(String[] args) {
				Collection c=new HashSet();	
				c.add(new Name("f1","l1"));
				c.add(new Name("f3","l3"));
				c.add(new Name("f5","l5"));
				//統一遍歷Collection裡面所有的元素
				Iterator i=c.iterator();	
				while(i.hasNext()){
					Name n=(Name)i.next();
					System.out.println(n.getFirstName()+" ");
				}
						
			}	
		}
		
		class Name{
			private String firstName,lastName;
			public Name(String firstName,String lastName){
				this.firstName=firstName;
				this.lastName=lastName;
			}
			public String getFirstName(){return firstName;}
			public String getLashName(){return lastName;}
			public String toString(){return firstName + " " + lastName;}
			
			public boolean equals(Object obj){
				if(obj instanceof Name){
					Name name=(Name) obj;
					return (firstName.equals(name.firstName)) &&(lastName.equals(name.lastName));
					
				}
				return super.equals(obj);
			}
			public int hashCode(){
				return firstName.hashCode();
			}
		
		}


輸出結果:


注意:

Iterator物件的remove方法是在迭代過程中刪除元素的唯一的安全方法。使用的過程中拒絕其他的remove方法。


下面一篇將為大家繼續深入講解Java容器,有興趣的朋友可以繼續關注我的部落格!





相關文章