HashSet 浅析示例
* 1、继承自抽象类 AbstractSet,实现接口 Set、Cloneable、Serializable;
* 2、元素无顺序;
* 3、元素不可重复;
* 4、采用哈希算法插入数据,插入速度快;
* 5、非线程安全,轻量级;
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、非线程安全,轻量级;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 }