* 1、繼承自抽象類 AbstractSet,實現接口 Set、Cloneable、Serializable;
* 2、元素無順序;
* 3、元素不可重復;
* 4、采用哈希算法插入數據,插入速度快;
* 5、非線程安全,輕量級;
* 6、由於實現了接口 Cloneable,故此可以被復制;
* 7、由於實現了接口 Serializable,故此可以被序列化到磁盤上;
1 package com.smbea.demo; 2 3 import java.util.HashSet; 4 import java.util.Iterator; 5 import java.util.Set; 6 7 /** 8 * 1、繼承自抽象類 AbstractSet,實現接口 Set、Cloneable、Serializable; 9 * 2、元素無順序; 10 * 3、元素不可重復; 11 * 4、采用哈希算法插入數據,插入速度快; 12 * 5、非線程安全,輕量級; 13 * 6、由於實現了接口 Cloneable,故此可以被復制; 14 * 7、由於實現了接口 Serializable,故此可以被序列化到磁盤上 15 * @author hapday 16 * @date 2016年7月9日 下午8:27:16 17 * 18 */ 19 public class HashSetDemo { 20 public static void main(String[] args) { 21 elementUnrepeatableTest(); 22 23 elementInconsecutiveTest(); 24 } 25 26 /** 27 * 驗證【元素不可重復】 28 */ 29 public static void elementUnrepeatableTest() { 30 int num1 [] = new int[]{7,8,9}; 31 int num2 [] = num1; 32 33 Set<Object> set = new HashSet<Object> (); 34 set.add(1); 35 set.add(2); 36 set.add(3); 37 set.add(3); 38 set.add("string"); 39 set.add(num1); 40 set.add(num2); 41 set.add("中文"); 42 set.add("中文也不可重復"); 43 set.add("中文也不可重復"); 44 45 System.out.println("*** 元素不可重復 ***"); 46 Iterator<Object> iterator = set.iterator(); 47 while(iterator.hasNext()){ 48 System.out.print(iterator.next() + " - "); 49 } 50 51 System.out.println("\n*** 元素不可重復(forEach) ***"); 52 for(Object object : set){ 53 System.out.print(object + " - "); 54 } 55 56 System.out.println("\n*** 元素不可重復(toString()) ***"); 57 System.out.print(set); 58 } 59 60 /** 61 * 【元素無順序】 62 */ 63 public static void elementInconsecutiveTest() { 64 Set<Integer> set = new HashSet<Integer> (); 65 for(int index = 1; index <= 100000; index++){ 66 set.add(index); // 加入 10 萬的元素 67 } 68 69 boolean exists = false; // 是否存在:true-存在;false-不存在 70 int count = 0; // 存在數,多次執行,我們發現當元素的個數為 10W 時,這個值是不變的,均為 17232,這在一定程度上說明哈希算法是相對穩定的 71 int current = 0; // 當前元素 72 int previous = 0; // 上一個元素 73 Iterator<Integer> iterator = set.iterator(); 74 while(iterator.hasNext()){ 75 current = iterator.next(); 76 if(current <= previous){ 77 exists = true; 78 count++; 79 } 80 81 previous = current; 82 } 83 84 System.out.println("\n*** 元素無順序 ***"); 85 System.out.print("是否無順序:" + exists + ", 可能的順序數為:" + count); 86 } 87 }