1. 程式人生 > 其它 >Java集合(一)

Java集合(一)

集合概述


Java集合類存放於 java.util 包中,是一個用來存放物件的容器
①、集合只能存放物件。比如你存一個 int 型資料 1放入集合中,其實它是自動轉換成 Integer 類後存入的,Java中每一種基本型別都有對應的引用型別。
②、集合存放的是多個物件的引用,物件本身還是放在堆記憶體中。
③、集合可以存放不同型別,不限數量的資料型別
Java 集合可分為 Set、List 和 Map 三種大體系
Set無序、不可重複的集合
List有序,可重複的集合
Map:具有對映關係的集合
在 JDK5 之後,增加了泛型,Java 集合可以記住容器中物件的資料型別>

1、HashSet


HashSet 是 Set 介面的典型實現,大多數時候使用 Set 集合時都使用這個實現類。我們大多數時候說的set集合指的都是HashSet

HashSetHash 演算法來儲存集合中的元素,因此具有很好的存取和查詢效能。

HashSet 具有以下特點:

  • 不能保證元素的排列順序

  • 不可重複

  • HashSet 不是執行緒安全的

  • 集合元素可以使 null

當向 HashSet 集合中存入一個元素時,HashSet 會呼叫該物件的 hashCode() 方法來得到該物件的 hashCode 值,然後根據 hashCode 值決定該物件在 HashSet 中的儲存位置。

所以元素存在於set集合的哪個位置,由這個值的hashcode決定。

如果兩個元素的 equals() 方法返回 true,但它們的 hashCode() 返回值不相等,hashSet 將會把它們儲存在不同的位置,但依然可以新增成功。

不可重複,真正指的是hashcode不相同,流程如下

  1. 檢測重複不重複,第一步用equals判斷內容是否重複,如果內容不重複(false),那就直接進行儲存。
  2. 如果內容重複,equals返回值為true,再用hash檢測儲存的地址。

java中,對set做了優化,可以存放不同型別的值,甚至可以直接存放類,很多都提現了java的方便性。

Set的一些方法:

程式碼實現:

		Set set = new HashSet();
		//Set介面引用指向子類Hashset的物件
		//set物件代表的是一個集合{}
		set.add(1);
		//新增元素
		set.add("a");
		System.out.println(set);
		set.remove(1);
		System.out.println(set);
		//移除元素
		System.out.println(set.contains("1"));
		//判斷是否包含元素
		set.clear();
		//清空集合
		System.out.println(set);

執行結果:

使用 Iterator 介面遍歷集合元素

Iterator 介面主要用於遍歷 Collection 集合中的元素,Iterator 物件也被稱為迭代器

Iterator 介面隱藏了各種 Collection 實現類的底層細節,嚮應用程式提供了遍歷 Collection 集合元素的統一程式設計介面

Iterator 僅用於遍歷集合,Iterator 本身並不提供承裝物件的能力。如果需要建立 Iterator 物件,則必須有一個被迭代的集合。

Iterator介面的一些方法:

程式碼實現:

		Set set = new HashSet();
		set.add("a");
		set.add("b");
		set.add("c");
		set.add("d");
		//使用迭代器遍歷集合
		Iterator it=set.iterator();
		while (it.hasNext()) {
			System.out.println(it.next());		
		}
		//for each迭代集合
		for (Object obj :set ) {
			//這個的意思是把set的每一個值取出來,賦值給obj
			//直到迴圈set的所有值
			System.out.println(obj);
		}
		System.out.println(set.size());	
		//獲取集合元素的個數

執行結果:

Hashset集合特性

不可重複性簡單證明

程式碼實現:

		set.add("a");
		set.add("b");
		set.add("c");
		set.add("d");
		set.add("d");
		System.out.println(set);
		System.out.println(set.size());

執行結果:

說明set集合存的值是不重複的,存入的第五個元素並沒有接收,因為與第四個元素相同。

Hashset排列順序

程式碼實現:

		set.add("a");
		set.add("b");
		set.add("c");
		set.add("d");
		set.add(null);
		System.out.println(set);
		System.out.println(set.size());	

執行結果:

這裡我們在最後輸入的null卻在最前列印,說明了元素排列順序和新增的先後順序無關,應當是與hashcode有關。

hashCode() 方法

HashSet 集合判斷兩個元素相等的標準:兩個物件通過 equals() 方法比較相等,並且兩個物件的 hashCode() 方法返回值也相等。

如果兩個物件通過 equals() 方法返回 true,這兩個物件的 hashCode 值也應該相同。