十八個常用Java集合類

//例6.1泛型類與非泛型類的區別:以LinkedList爲例

import java.util.*;
class GenericTest1 {
	public static void main(String[] args) {
		LinkedList list = new LinkedList();//創建LinkedList集合
		list.add(new Integer(1)); //添加Integer對象到集合中
		list.add(new Integer(2)); //添加Integer對象到集合中
		list.add(new Integer(4)); //添加Integer對象到集合中
		list.add("Alice");//可以正常地將String對象添加到集合中
		int sum = 0;
		for(int i=0; i<list.size();i++){//累加所有Integer對象的數值之和
			Integer a = (Integer) list.get(i); //獲取集合的第i個對象,並強制轉型
			sum = sum + a.intValue(); //累加
		}
		System.out.println("sum = "+sum);
	}
}
class GenericTest2 {
	public static void main(String[] args) {
	//下一行代碼創建管理Integer對象的LinkedList集合
	LinkedList<Integer> list = new LinkedList<Integer>();//確定類型參數E爲Integer
		list.add(new Integer(1)); //添加Integer對象到集合中
		list.add(new Integer(2));
		list.add(new Integer(4));
		list.add("Alice"); //這行代碼編譯出錯, 參數只能爲String類型,
		int sum = 0;
		for(int i=0; i<list.size();i++){//累加所有Integer對象的數值之和
			Integer a = list.get(i); //不需要強制轉換
			sum = sum + a.intValue();
		}
		System.out.println("sum = "+sum);
	}
}

//例6.2 通配符類型的使用示例

import java.util.*;
public class Test {
	public static void main(String[] args) {
		LinkedList<A> a = new LinkedList<A>();
		LinkedList<B> b = new LinkedList<B>();
		LinkedList<Object> c = new LinkedList<Object>();
		printLinkedList(a);
		printLinkedList(b);
		//printLinkedList(c);//出錯,無法正確轉換並傳遞參數
		printList(a);
		printList(b);
		printList(c);
		printCollection(a);
		printCollection(b);
		printCollection(c);
	}
	public static void printLinkedList(LinkedList<? extends A> list){/*代碼省略*/	}
	public static void printList(List<? super B> list){	/*代碼省略*/	}
	public static void printCollection(Collection<?> collection){/*代碼省略*/	}
}
class A{}
class B extends A{}

//例6.3Collection與Iterator接口

import java.util.*;
public class CollectionIteratorExample {
	public static void main(String[] args) {
		//創建一個管理String對象的HashSet集合,並將其轉型爲Collection接口類型
		Collection<String> c1 = new HashSet<String>(); 
		c1.add("張三");//添加元素(字符串元素)
		c1.add("李四");
		System.out.print("c1集合信息:");
		printCollection(c1);
		
		Collection<String> c2 = new HashSet<String>();//轉型爲Collection接口類型
		c2.add("王五");
		c2.add("趙六");
		System.out.print("c2集合信息:");
		printCollection(c2);
		
		c1.addAll(c2);//將c2的元素都添加到c1中,即集合合併
		System.out.print("c1.addAll(c2)後,c1集合信息:");
		printCollection(c1); 
		if(c1.contains("王五") == true)
			System.out.println("c1包含王五");
		if(c1.containsAll(c2) == true)
			System.out.println("c1包含c2");
		
		c1.removeAll(c2);//將c1集合中出現在c2集合的元素刪除
		System.out.print("c1.removeAll(c2)後,c1集合信息:");
		printCollection(c1); 
		
		c1.retainAll(c2);//將c1中沒有出現在c2的元素刪除
		System.out.print("c1.retainAll(c2)後,c1集合信息:");
		printCollection(c1);
		
		String[]  names = c2.toArray(new String[0]);//轉換爲對象數組並返回
		System.out.print("c2.toArray(new String[0])獲得String數組,相關數組信息:");
		for(int i=0;i<names.length;i++)
			System.out.print(names[i]+" ");
	}
	public static void printCollection(Collection<String> c){
		System.out.print("元素個數:"+c.size()+" 分別是:");
		Iterator<String> iterator = c.iterator();//獲得Iterator對象引用
		while(iterator.hasNext())//對集合c的元素進行遍歷
			System.out.print(iterator.next()+" ");
		System.out.print("\n");	
	}
}

//例6.4通過Iterator刪除元素的使用示例

import java.util.*;
public class IteratorRemoveExample {
	public static void main(String[] args) {
		Collection<String> nameSet = new HashSet<String>();//轉型爲Collection類型
		nameSet.add("張三");
		nameSet.add("張四");
		nameSet.add("李三");
		nameSet.add("李四");
		nameSet.add("王三");
		nameSet.add("王四");
		System.out.print("刪除所有姓李的名字之前,元素個數是:" +
				nameSet.size() + " 分別是:");		
		Iterator<String> iterator = nameSet.iterator();
		while(iterator.hasNext())//遍歷集合,顯示元素信息
			System.out.print(iterator.next()+" ");		
		iterator = nameSet.iterator();
		while(iterator.hasNext()){//遍歷元素,並刪除所有姓李的名字
			String e = iterator.next();
			if(e.startsWith("李") == true)
				iterator.remove();
		}
		System.out.print("\n刪除所有姓李的名字之後,元素個數是:" + 
				nameSet.size() + " 分別是:");		
		iterator = nameSet.iterator();//遍歷集合,顯示元素信息
		while(iterator.hasNext())
			System.out.print(iterator.next()+" ");		
	}
}

//例6.5 List接口的使用示例

import java.util.*;
public class ListExample {
	public static void main(String[] args) {
		List<String> list1 = new LinkedList<String>();//集合轉型爲List接口	
		List<String> list2 = new LinkedList<String>();//集合轉型爲List接口	
		list1.add("張三");
		list1.add(0,"李四");//將"2李四"添加到list1的第0個位置
		list1.add("王五");
		list1.add("趙六");
		System.out.print("list1的元素:");
		printList(list1);
		
		list2.add("李四");
		list2.add("王五");
		list2.add("趙六");
		System.out.print("list2的元素:");
		printList(list2);
		
		list1.addAll(0,list2);//將list2的元素全部添加到list的第0個開始的位置
		System.out.print("list1.addAll(0,list2)執行後,list1的元素:");
		printList(list1);
		
		list1.remove(0);//刪除list1的第0個元素
		System.out.print("list1.remove(0)執行後,list1的元素:");
		printList(list1);
		
		list1.set(0,"趙老六");//將第0個元素替換爲"趙老六"
		System.out.print("list1.set(0,\"趙老六\")執行後,list1的元素:");
		printList(list1);
		
		System.out.println("list1的第2個元素是:" + list1.get(2));
		System.out.println("list1中\"趙六\"的位置(從前往後數):" + 
				list1.indexOf("趙六"));//查找元素"趙六"的位置下標
		System.out.println("list1中\"趙六\"的位置(從後往前數):" + 
				list1.lastIndexOf("趙六"));
		//下行代碼將list1的第1,2,3個元素組成子列表並返回(不包括第4個元素)
		List<String> list3 = list1.subList(1,4);
		System.out.print("list1.subList(1,4)返回的子列表元素:");
		printList(list3);		
	}
	public static void printList(List<String> c){
		ListIterator<String> iterator = c.listIterator();//獲得ListIterator對象引用
		while(iterator.hasNext())//對集合c的元素進行遍歷
			System.out.print(iterator.next()+" ");
		System.out.print("\n");	
	}
}

//例6.6ListIterator接口的使用示例

import java.util.*;
public class ListIteratorExample {
	public static void main(String[] args) {
		List<String> list = new LinkedList<String>();//將集合轉型爲List接口類型
		list.add("張三");//逐個添加四個元素
		list.add("李四");
		list.add("王五");
		list.add("趙六");
		System.out.print("正向遍歷的順序是:");
		ListIterator<String> iterator = list.listIterator();//獲得ListIterator對象
		while(iterator.hasNext())//正向遍歷
			System.out.print("(位置"+iterator.nextIndex()+":"+iterator.next()+")");
		//注意:此時的遊標位於迭代器的尾部
		System.out.print("\n逆向遍歷的順序是:");
		while(iterator.hasPrevious())//逆向遍歷
			System.out.print("(位置"+iterator.previousIndex()+
					":"+iterator.previous()+")");
		System.out.print("\n先正向、後反向:");
		//下面代碼說明改變遍歷方向後的特點
		System.out.print("(位置"+iterator.nextIndex()+":"+iterator.next()+")");
		System.out.print("(位置"+iterator.previousIndex()+":"+iterator.previous()+")");
		iterator = list.listIterator();//重新獲得ListIterator對象。
		while(iterator.hasNext()){//正向遍歷,替換"李小四",增加"李小五"
			String str = iterator.next();
			if(str.equals("李四")){
				iterator.set("李小四");//替換元素:將"李四"替換爲"李小四"
				iterator.add("李小五");//添加元素:在"李小四”後面添加"李小五".
			}
		}
		System.out.print("\n將李四替換爲李小四,然後添加李小五,元素分別是:\n");
		iterator = list.listIterator();		
		while(iterator.hasNext())
			System.out.print("(位置"+iterator.nextIndex()+":"+iterator.next()+")");
	}
}

//例6.7LinkedList的使用示例

import java.util.*;
public class LinkedListExample {
	public static void main(String[] args) {
		LinkedList<String> list1 = new LinkedList<String>();
		list1.add("李四");
		list1.addLast("王五");//在集合尾部添加
		list1.addFirst("張三");//在集合頭部添加
		System.out.print("list1的元素:");
		printList(list1);
		LinkedList<String> list2 = new LinkedList<String>(list1);//根據list1創建list2
		list2.addFirst("李四");
		list2.add("趙六");
		System.out.print("list2的元素:");
		printList(list2);
		System.out.println("list2的頭尾兩個元素是:"+list2.getFirst()+" "+list2.getLast());
		list2.removeFirst();
		list2.removeLast();
		System.out.print("刪除list2的頭尾兩個元素後,list2的元素是:");
		printList(list2);
	}
	public static void printList(List<String> c){
		ListIterator<String> iterator = c.listIterator();//獲得ListIterator對象引用
		while(iterator.hasNext())//對集合c的元素進行遍歷
			System.out.print(iterator.next()+" ");
		System.out.print("\n");	
	}
}

//例6.8 ArrayList的使用示例

import java.util.*;
public class ArrayListExample {
	public static void main(String[] args) {
		ArrayList<String> list1 = new ArrayList<String>();//初始容量爲默認值
		list1.add("張三");
		list1.add("李四");
		list1.add("王五");
		System.out.print("list1的元素:");
		printList(list1);
		
		ArrayList<String> list2 = new ArrayList<String>(list1);//根據list1創建list2
		System.out.print("list2的元素:");
		printList(list2);
		
		LinkedList<String> list3 = new LinkedList<String>();//創建LinkedList集合
		list3.add("張三");
		list3.add("李四");
		list3.add("王五");
		System.out.print("list3的元素:");
		printList(list3);
		
		int initialCapacity = list1.size() + list2.size();//計算需要的初始容量
		ArrayList<String> list4 = new ArrayList<String>(initialCapacity);//指定初始容量
		list4.addAll(list1);
		list4.addAll(list2);
		list4.ensureCapacity(list4.size()+list3.size());//添加list3之前,提前增加容量
		list4.addAll(list3);//將ArrayList類型集合list3的元素添加到list4
		System.out.print("list4的元素:");
		printList(list4);
	}
	public static void printList(List<String> c){
		ListIterator<String> iterator = c.listIterator();//獲得ListIterator對象引用
		while(iterator.hasNext())//對集合c的元素進行遍歷
			System.out.print(iterator.next()+" ");
		System.out.print("\n");	
	}
}

//例6.9 HashSet的使用示例:不能添加重複元素

import java.util.*;
public class HashSetExample {
	public static void main(String[] args) {
		Set<String> c = new HashSet<String>(); 
		c.add(new String("王五"));
		c.add(new String("王五"));
		c.add(new String("張三"));
		c.add(new String("張三"));
		c.add(new String("李四"));
		c.add(new String("李四"));
		c.add(new String("趙六"));
		c.add(new String("趙六"));
		c.add(null);
		c.add(null);
		System.out.print("元素個數:"+c.size()+" 分別是:");
		Iterator<String> iterator = c.iterator();//獲得Iterator對象引用
		while(iterator.hasNext())//對集合c的元素進行遍歷
			System.out.print(iterator.next()+" ");
		System.out.print("\n");	
	}
}

//例6.10 Set集合的使用示例:不定義Student類的equals和hashCode方法

import java.util.*;
class Student {
	private String id,name,gender;
	private int age;			
	public Student(String id,String name,int age,String gender){
		this.id = id; this.name = name; 
		this.age = age; this.gender = gender;
	}
	public String toString(){
		return "id = "+id + " name = "+name+" age = "+age+" gender = "+gender;
	}
}
public class Test2{
	public static void main(String[] args){
		//創建了3個Student對象
		Student student1 = new Student("001","張三",18,"男");//創建新Student對象
		Student student2 = new Student("001","張三",18,"男");//創建新Student對象
		Student student3 = new Student("001","李四",19,"男");//創建新Student對象
		HashSet<Student> set = new HashSet<Student>();
		set.add(student1);
		set.add(student2);
		set.add(student3);
		System.out.println("共有" + set.size()+"個元素");
		Iterator<Student> iterator = set.iterator();
		while(iterator.hasNext()){
			System.out.println(iterator.next().toString());
		}
	}
}

//例6.11 Set集合的使用示例:定義Student類的equals和hashCode方法

import java.util.*;
class Student {
	private String id,name,gender;
	private int age;			
	public Student(String id,String name,int age,String gender){
		this.id = id; this.name = name; 
		this.age = age; this.gender = gender;
	}
	public boolean equals(Object obj){
		if( obj instanceof Student){//保證obj是Student或其子類的對象
			Student a = (Student)obj; //可以順利向下轉型爲Student類型
			return name.equals(a.name) && this.id.equals(a.id) && 
			this.gender.equals(a.gender) && this.age == a.age;
		}
		return false;
	}
	public int hashCode(){
		//將各個成員變量的哈希碼值進行異或得到Student對象的哈希碼值
		return id.hashCode()^ name.hashCode() ^ 
		gender.hashCode() ^ (new Integer(age).hashCode());
	}
	public String toString(){
		return "id = "+id + " name = "+name+" age = "+age+" gender = "+gender;
	}
}
public class Test3{
	public static void main(String[] args){
		Student student1 = new Student("001","張三",18,"男");
		Student student2 = new Student("001","張三",18,"男");
		Student student3 = new Student("001","李四",19,"男");
		HashSet<Student> set = new HashSet<Student>();
		set.add(student1);
		set.add(student2);
		set.add(student3);
		System.out.println("共有" + set.size()+"個元素");
		Iterator<Student> iterator = set.iterator();
		while(iterator.hasNext()){
			System.out.println(iterator.next().toString());
		}
	}
}

//例6.12 TreeSet的使用示例:排序集合創建與操作

import java.util.*;
public class TreeSetExample {
	public static void main(String[] args) {
		TreeSet<String> c = new TreeSet<String>(); 
		c.add("John");
		c.add("Bob");
		c.add("Alice");
		c.add("Clinton");
		c.add("White");
		c.add("Jack");
		System.out.print("TreeSet集合信息:");
		printSet(c);
		System.out.println("最小的元素:"+c.first()+"最大的元素:"+c.last());
		System.out.print("c.headSet(\"Clinton\")子集信息:");
		printSet(c.headSet("Clinton"));
		System.out.print("c.tailSet(\"Clinton\")子集信息:");
		printSet(c.tailSet("Clinton"));
		System.out.print("c.subSet(\"Bob,\"\"John\")子集信息:");
		printSet(c.subSet("Bob","John"));
	}
	public static void printSet(Set<String> c){
		System.out.print("元素個數:"+c.size()+",分別是:");
		Iterator<String> iterator = c.iterator();//獲得Iterator對象引用
		while(iterator.hasNext())//對集合c的元素進行遍歷
			System.out.print(iterator.next()+" ");
		System.out.print("\n");	
	}	
}

//例6.13 TreeSet的使用示例:Comparable接口與自然排序

import java.util.*;
class Student implements Comparable<Student> {
	private String id,name,gender;
	private int age;			
	public Student(String id,String name,int age,String gender){
		this.id = id; this.name = name; 
		this.age = age; this.gender = gender;
	}
	public String toString(){
		return "id = "+id + " name = "+name+" age = "+age+" gender = "+gender;
	}
	public int compareTo(Student o) {//實現Comparable接口的抽象方法compareTo
		return this.id.compareTo(o.id);  //比較當前對象與參數對象o的id大小
	}
}
public class Test4{
	public static void main(String[] args){
		Student student1 = new Student("003","張三",18,"男");
		Student student2 = new Student("004","張四",20,"女");
		Student student3 = new Student("002","張二",19,"男");
		Student student4 = new Student("002","趙二",17,"女");//沒有插入到集合中
		Student student5 = new Student("001","張一",18,"男");
		Student student6 = new Student("005","張五",20,"男");
		Set<Student> set = new TreeSet<Student>();
		set.add(student1);
		set.add(student2);
		set.add(student3);
		set.add(student4);
		set.add(student5);
		set.add(student6);
		System.out.println("按照age排序後的" + set.size()+"個元素");
		Iterator<Student> iterator = set.iterator();
		while(iterator.hasNext()){
			System.out.println(iterator.next().toString());
		}
	}
}

//例6.14 TreeSet的使用示例:Comparator接口與比較器

import java.util.*;
class Student{
	private String id,name,gender;
	private int age;			
	public Student(String id,String name,int age,String gender){
		this.id = id; this.name = name; 
		this.age = age; this.gender = gender;
	}
	public String toString(){
		return "id = "+id + " name = "+name+" age = "+age+" gender = "+gender;
	}
	public String getId(){ return id; }
}
class StudentComparator implements Comparator<Student>{//定義比較器類
	public int compare(Student o1, Student o2) {
		return o1.getId().compareTo(o2.getId());
	}
}
public class Test5{
	public static void main(String[] args){
		Student student1 = new Student("003","張三",18,"男");
		Student student2 = new Student("004","張四",20,"女");
		Student student3 = new Student("002","張二",19,"男");
		Student student4 = new Student("002","趙二",17,"女");//沒有插入到集合中
		Student student5 = new Student("001","張一",18,"男");
		Student student6 = new Student("005","張五",20,"男");
		//以下代碼傳遞一個Comparator<Student>接口類型對象給TreeSet構造器
		Set<Student> set = new TreeSet<Student>(new StudentComparator());
		set.add(student1);
		set.add(student2);
		set.add(student3);
		set.add(student4);
		set.add(student5);
		set.add(student6);
		System.out.println("按照age排序後的" + set.size()+"個元素");
		Iterator<Student> iterator = set.iterator();
		while(iterator.hasNext()){
			System.out.println(iterator.next().toString());
		}
	}
}

//例6.15 Queue的使用示例

import java.util.*;
public class QueueExample {
	public static void main(String[] args) {
		Queue<String> queue = new LinkedList<String>();//對象轉型爲Queue接口	
		queue.add("Alice");
		queue.offer("Bob");
		queue.offer("Clinton");
		queue.offer("Jack");
		System.out.print("queue的長度是"+queue.size()+" 它的元素有:");
		printQueue(queue);
		System.out.println("通過queue.peek()獲得頭元素:"+queue.peek());
		System.out.print("queue.peek()調用之後,隊列的元素有:");
		printQueue(queue);
		System.out.println("通過queue.poll()獲得頭元素:"+queue.poll());
		System.out.print("queue.poll()調用之後,隊列的元素有:");
		printQueue(queue);
	}
	public static void printQueue(Queue<String> c){
		Iterator<String> iterator = c.iterator();//獲得Iterator對象引用
		while(iterator.hasNext())//對集合c的元素進行遍歷
			System.out.print(iterator.next()+" ");
		System.out.print("\n");	
	}
}

//例6.16 Map的使用示例

import java.util.*;
class Student{
	private String id,name,gender;
	private int age;			
	public Student(String id,String name,int age,String gender){
		this.id = id; this.name = name; 
		this.age = age; this.gender = gender;
	}
	public String toString(){
		return "id = "+id + " name = "+name+" age = "+age+" gender = "+gender;
	}
	public String getId(){ return id; }
}
class MapExample{
	public static void main(String[] args){
		Student student1 = new Student("001","張一",18,"男");
		Student student2 = new Student("002","張二",20,"女");
		Student student3 = new Student("003","張三",19,"男");
		Student student4 = new Student("004","張四",17,"女");
		Map<String,Student> map = new HashMap<String,Student>();//創建Map對象
		//以下四行代碼添加四個key-value對,key是學號(id),value是學生對象
		map.put(student1.getId(),student1); 
		map.put(student2.getId(),student2);
		map.put(student3.getId(),student3);
		map.put(student4.getId(),student4);
		if(map.containsKey("003")==true){//查找是否有key爲003的key-value對
			System.out.println("map中包含key爲003的學生對象");
			System.out.println("map中學號003的對象信息是:"+
					map.get("003"));//根據key獲得value(根據學號得到學生對象)
		}
		//下一行代碼功能:查找是否有value爲student4的key-value對
		if(map.containsValue(student4) == true) 
			System.out.println("map中包含value爲("+student4+")的學生對象");
		
		map.remove("003");//刪除學號爲003的key-value對
		System.out.println("刪除學號爲003的學生對象後");
		Set<String> keys = map.keySet(); //獲得key的集合
		System.out.print("map的key共有" + keys.size() + "個,它們是:");
		Iterator<String> iterator1 = keys.iterator();
		while(iterator1.hasNext())
			System.out.print(iterator1.next()+"  ");
		Collection<Student> values = map.values();//獲得value的集合
		System.out.println("\nmap的value共有" + values.size() + "個,它們是:");
		Iterator<Student> iterator2 = values.iterator();
		while(iterator2.hasNext())
			System.out.println(iterator2.next()+"  ");	
	}
}

//例6.17 SortedMap的使用示例

import java.util.*;
class Student{
	private String id,name,gender;
	private int age;			
	public Student(String id,String name,int age,String gender){
		this.id = id; this.name = name; 
		this.age = age; this.gender = gender;
	}
	public String toString(){
		return "id = "+id + " name = "+name+" age = "+age+" gender = "+gender;
	}
	public String getId(){ return id; }
}
class SortedMapExample{
	public static void main(String[] args){
		Student student1 = new Student("004","張四",17,"女");
		Student student2 = new Student("001","張一",18,"男");
		Student student3 = new Student("003","張三",19,"男");
		Student student4 = new Student("005","張五",19,"男");
		Student student5 = new Student("002","張二",20,"女");
		SortedMap<String,Student> map = new TreeMap<String,Student>();
		map.put(student1.getId(),student1);
		map.put(student2.getId(),student2);
		map.put(student3.getId(),student3);
		map.put(student4.getId(),student4);
		map.put(student5.getId(),student5);
		System.out.println("map的第一個鍵是:" + map.firstKey());
		System.out.println("map的最後一個鍵是:" + map.lastKey());
		Set<String> keys = map.keySet();
		System.out.print("map的key共有" + keys.size() + "個,它們是:");
		Iterator<String> iterator1 = keys.iterator();
		while(iterator1.hasNext())
			System.out.print(iterator1.next()+"  ");
		Collection<Student> values = map.values();
		System.out.println("\nmap的value共有" + values.size() + "個,它們是:");
		Iterator<Student> iterator2 = values.iterator();
		while(iterator2.hasNext())
			System.out.println(iterator2.next()+"  ");	
		//獲取子映射
		map = map.subMap("002","004");//獲取鍵爲002、003的子映射
		values = map.values();
		System.out.println("子映射的value共有" + values.size() + "個,它們是:");
		iterator2 = values.iterator();
		while(iterator2.hasNext())
			System.out.println(iterator2.next()+"  ");	
	}
}

//例6.18 集合的使用示例

import java.util.*;
interface Speakable{
	public abstract void speak();
}
class Dog implements Speakable{
	public void speak(){System.out.println("我是小狗,汪汪叫");}	
}
class ShepherdDog extends Dog{
	public void eat(){System.out.print("大口喫肉,流口水......");}		
	public void speak(){eat();System.out.println("我是牧羊犬,有肉喫才叫");}	
}
class Cat implements Speakable{
	public void speak(){System.out.println("我是小貓,喵喵叫");}	
}
class Sheep implements Speakable{
	public void speak(){System.out.println("我是綿羊,咩咩叫");}	
}
class AnimalTool{
	public static void animalSpeak(Speakable[] animals){
		for(int i=0; i<animals.length;i++)
			animals[i].speak();
	}
	public static void animalSpeak(LinkedList<Speakable> animals){
		Iterator<Speakable> iterator = animals.iterator();
		while(iterator.hasNext()){
			Speakable animal = iterator.next();
			animal.speak();
		}
	}
}
public class Test7 {
	public static void main(String[] args) {
		Speakable[] animals = new Speakable[4];
		animals[0] = new Dog();		//將Dog類型引用轉型爲Speakable類型
		animals[1] = new Cat();		//將Cat類型引用轉型爲Speakable類型
		animals[2] = new Sheep();	//將Sheep類型引用轉型爲Speakable類型
		animals[3] = new ShepherdDog();	//將ShepherdDog型引用轉型爲Speakable型
		AnimalTool.animalSpeak(animals);	
		
		LinkedList<Speakable> animals2 = new LinkedList<Speakable>();
		animals2.add(new Dog());
		animals2.add(new Cat());
		animals2.add(new Sheep());
		animals2.add(new ShepherdDog());
		AnimalTool.animalSpeak(animals2);	
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章