1. 程式人生 > >Java資料結構與演算法之資料結構-邏輯結構-集合(四)------集合之Collection介面

Java資料結構與演算法之資料結構-邏輯結構-集合(四)------集合之Collection介面

Java集合類的基本概述:

Java集合中主要有兩個大的介面:Collection介面和Map介面,Collection是元素集合,Map是鍵值對集合;其中List和Set繼承了Collection介面,List是有序元素集合,Set是無序元素集合;而ArrayList和LinkedList實現了List介面,HashSet實現了Set介面這兩個都比較常用;HashMap和HashTable實現了Map介面並且HashTable是執行緒安全的,但是HashMap效能更好。這一節中主要探究Java的Collection集合介面的原理和使用。


一、Collection介面的API和原始碼解析:

1、Collection的API結構:

圖1:

圖1顯示的是Collection介面在Java8中介面和實現類的層級關係。可以說Collection是java集合介面的頂層介面但是這個介面還繼承了父介面Iterable介面(繼承了Iterable介面之後Collection介面的子介面和子介面的實現類都可以使用Iterable介面中定義的Iterator方法用於集合的foreach迭代)。Collection介面擁有眾多的子介面,其中在開發中使用眾多的有List介面,Queue介面Set介面等。

2、Collection的原始碼解析:

該介面在Java.util包下。主要擁有如下的一些方法:

圖2:

除去繼承於Iterable的方法之外的所有方法都是Collection介面擁有的方法。以下對Collection的部分方法扽別作介紹:

①、  boolean add(E e); 向集合中新增一個元素;

②、 boolean remove(Object o);從集合中刪除一個元素;

③、 boolean containsAll(Collection<?> c); 假如該集合中包含指定集合的所有元素則返回true;

④、 boolean containsAll(Collection<?> c); 向集合中新增指定集合的所有元素;

⑤、 boolean removeAll(Collection<?> c); 從集合中刪除指定的所有元素;

⑥、 boolean retainAll(Collection<?> c); 保留指定集合中的元素;

⑦、  void clear(); 清空集合中的所有元素;

具體的含義和操作技巧可以在實戰中去練習。

注意:

Java.util.Collection是java集合類的一個頂級介面,其提供了對java集合物件進行基本操作的通用介面方法。Collection介面再java類庫中有很多具體的實現。

二、Java中Collection和Collections的區別

如上文闡述Collection是集合類的一個上層介面,頂一個集合框架的共同方法。然而Collections是一個操作集合類的一個工具類(幫助類)。其中提供了眾多的靜態方法用於對集合類進行排序,搜尋以及執行緒安全等操作。

集合工具類Collections的簡單學習:這個工具類位於:java.util.Collections包下。

1、工具類中定義的靜態常量:

private static final int BINARYSEARCH_THRESHOLD   = 5000;
    private static final int REVERSE_THRESHOLD        =   18;
    private static final int SHUFFLE_THRESHOLD        =    5;
    private static final int FILL_THRESHOLD           =   25;
    private static final int ROTATE_THRESHOLD         =  100;
    private static final int COPY_THRESHOLD           =   10;
    private static final int REPLACEALL_THRESHOLD     =   11;
    private static final int INDEXOFSUBLIST_THRESHOLD =   35;

2、 還有眾多的方法:

圖3

3、 集合工具類的應用例子:

簡單的實現一個使用Collections進行List排序的例子:

@Test
	public void testCollections(){
		//生成一個隨機陣列
		List<Integer> list = new ArrayList<Integer>();
		
		Random rand = new Random();
		
		//生成一個隨機陣列
		for(int i = 0; i<100;i++){
			list.add(rand.nextInt(500));
		}
		
		//列印隨機陣列的值
		System.out.println("未排序之前的陣列: ");
		for(Integer in: list){
			System.out.print(in+",");
		}
		System.out.println();
		System.out.println();
		
		//呼叫Collections工具類對List進行排序
		Collections.sort(list);
		
		//對排序之後的資料列印
		//列印隨機陣列的值
		System.out.println("排序之後的陣列: ");
		for(Integer in: list){
			System.out.print(in+",");
		}
	}

排序的結果為:

未排序之前的陣列: 
75,164,356,330,90,210,349,269,44,392,205,289,342,415,96,292,148,313,153,271,451,459,97,87,13,467,407,329,84,376,314,7,319,304,71,417,325,400,61,83,416,466,363,372,121,343,173,60,416,297,399,343,214,492,360,333,271,162,158,238,14,265,240,339,399,268,73,315,225,70,335,417,85,174,77,163,91,41,457,116,160,343,27,180,245,316,14,100,84,8,244,77,73,409,271,81,458,256,35,213,

排序之後的陣列: 
7,8,13,14,14,27,35,41,44,60,61,70,71,73,73,75,77,77,81,83,84,84,85,87,90,91,96,97,100,116,121,148,153,158,160,162,163,164,173,174,180,205,210,213,214,225,238,240,244,245,256,265,268,269,271,271,271,289,292,297,304,313,314,315,316,319,325,329,330,333,335,339,342,343,343,343,349,356,360,363,372,376,392,399,399,400,407,409,415,416,416,417,417,451,457,458,459,466,467,492,


三、總結:

Collection只是一個Java眾多介面的一個簡單介面而已,因此知識點也相對簡單。之所以重視它,就是因為Java集合就是以其作為擴充套件的。