集合框架-Set集合

ZHOU_VIP發表於2017-04-25

1:Set集合(理解)

普通for迴圈是list集合特有的,遍歷set集合、增強for和迭代器可以

(1)Set集合的特點

    無序,唯一


package cn.itcast_01;

import java.util.HashSet;
import java.util.Set;

/*
 * Collection
 * 		|--List
 * 			有序(儲存順序和取出順序一致),可重複
 * 		|--Set
 * 			無序(儲存順序和取出順序不一致),唯一
 * 
 * HashSet:它不保證 set 的迭代順序;特別是它不保證該順序恆久不變。就是說這次測得是這樣、下次可能會變化
 * 注意:雖然Set集合的元素無序,但是,作為集合來說,它肯定有它自己的儲存順序,
 * 而你的順序恰好和它的儲存順序一致,這代表不了有序,你可以多儲存一些資料,就能看到效果。
 */
public class SetDemo {
	public static void main(String[] args) {
		// 建立集合物件
		Set<String> set = new HashSet<String>();

		// 建立並新增元素
		set.add("hello");
		set.add("java");
		set.add("world");
		set.add("java");
		set.add("world");

		// 增強for
		for (String s : set) {
			System.out.println(s);
		}
	}
}

(2)HashSet集合(掌握)

    A:底層資料結構是雜湊表(是一個元素為連結串列的陣列)

    B:雜湊表底層依賴兩個方法:hashCode()和equals()

      執行順序:

        首先比較雜湊值是否相同

            相同:繼續執行equals()方法

                返回true:元素重複了,不新增

                返回false:直接把元素新增到集合

            不同:就直接把元素新增到集合

    C:如何保證元素唯一性的呢?

        由hashCode()和equals()保證的

    D:開發的時候,程式碼非常的簡單,自動生成即可。

    E:HashSet儲存字串並遍歷

    F:HashSet儲存自定義物件並遍歷(物件的成員變數值相同即為同一個元素)


package cn.itcast_02;

import java.util.HashSet;

/*
 * HashSet:儲存字串並遍歷
 * 問題:為什麼儲存字串的時候,字串內容相同的只儲存了一個呢?
 * 通過檢視add方法的原始碼,我們知道這個方法底層依賴 兩個方法:hashCode()和equals()。
 * 步驟:
 * 		首先比較雜湊值
 * 		如果相同,繼續走,比較地址值或者走equals()
 * 		如果不同,就直接新增到集合中	
 * 按照方法的步驟來說:	
 * 		先看hashCode()值是否相同
 * 			相同:繼續走equals()方法
 * 				返回true:	說明元素重複,就不新增
 * 				返回false:說明元素不重複,就新增到集合
 * 			不同:就直接把元素新增到集合
 * 如果類沒有重寫這兩個方法,預設使用Object()的。一般來說不會相同。
 * 而String類重寫了hashCode()和equals()方法,所以,它就可以把內容相同的字串去掉。只留下一個。
 */
public class HashSetDemo {
	public static void main(String[] args) {
		// 建立集合物件
		HashSet<String> hs = new HashSet<String>();

		// 建立並新增元素
		hs.add("hello");
		hs.add("world");
		hs.add("java");
		hs.add("world");

		// 遍歷集合
		for (String s : hs) {
			System.out.println(s);
		}
	}
}



相關文章