* 1、继承自抽象类 AbstractSet,实现接口 Set、Cloneable、Serializable;
* 2、元素无顺序;
* 3、元素不可重复;
* 4、采用哈希算法插入数据,插入速度快;
* 5、非线程安全,轻量级;

 package com.smbea.demo;

 import java.util.HashSet;
import java.util.Iterator;
import java.util.Set; /**
* 1、继承自抽象类 AbstractSet,实现接口 Set、Cloneable、Serializable;
* 2、元素无顺序;
* 3、元素不可重复;
* 4、采用哈希算法插入数据,插入速度快;
* 5、非线程安全,轻量级; * @author hapday
* @date 2016年7月9日 下午8:27:16
*
*/
public class HashSetDemo {
public static void main(String[] args) {
elementUnrepeatableTest(); elementInconsecutiveTest();
} /**
* 验证【元素不可重复】
*/
public static void elementUnrepeatableTest() {
int num1 [] = new int[]{7,8,9};
int num2 [] = num1; Set<Object> set = new HashSet<Object> ();
set.add(1);
set.add(2);
set.add(3);
set.add(3);
set.add("string");
set.add(num1);
set.add(num2);
set.add("中文");
set.add("中文也不可重复");
set.add("中文也不可重复"); System.out.println("*** 元素不可重复 ***");
Iterator<Object> iterator = set.iterator();
while(iterator.hasNext()){
System.out.print(iterator.next() + " - ");
} System.out.println("\n*** 元素不可重复(forEach) ***");
for(Object object : set){
System.out.print(object + " - ");
} System.out.println("\n*** 元素不可重复(toString()) ***");
System.out.print(set);
} /**
* 【元素无顺序】
*/
public static void elementInconsecutiveTest() {
Set<Integer> set = new HashSet<Integer> ();
for(int index = 1; index <= 100000; index++){
set.add(index); // 加入 10 万的元素
} boolean exists = false; // 是否存在:true-存在;false-不存在
int count = 0; // 存在数,多次执行,我们发现当元素的个数为 10W 时,这个值是不变的,均为 17232,这在一定程度上说明哈希算法是相对稳定的
int current = 0; // 当前元素
int previous = 0; // 上一个元素
Iterator<Integer> iterator = set.iterator();
while(iterator.hasNext()){
current = iterator.next();
if(current <= previous){
exists = true;
count++;
} previous = current;
} System.out.println("\n*** 元素无顺序 ***");
System.out.print("是否无顺序:" + exists + ", 可能的顺序数为:" + count);
}
}
04-30 23:10