* 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);
}
}

HashSet 浅析示例的更多相关文章

  1. Java集合框架之HashSet浅析

    Java集合框架之HashSet浅析 一.HashSet综述: 1.1HashSet简介 位于java.util包下的HashSet是Java集合框架的重要成员,它在jdk1.8中定义如下: publ ...

  2. 了解C#中的HashSet与示例

    在C#中引入HashSet 在.NET框架中,有几个类可用于执行这些操作.一些课程如下: 列表 字典 哈希集 队列 集合 在C#编程中,像ArrayList,List这样的集合,只需添加其中的值,而不 ...

  3. 关于HashMap,HashTable,HashSet浅析

    首先,最重要的,HashMap  作为一个我们使用非常多的集合.最常被大家认知的是,它是一个key-value形式存储数据的数据结构,可以实现快速的存,取操作.  关于HashMap的源码,我们截取一 ...

  4. LinkedList 浅析示例

    package com.smbea.demo; import java.util.Iterator; import java.util.LinkedList; import java.util.Lis ...

  5. ArrayList 浅析示例

    package com.smbea.demo; import java.util.ArrayList; import java.util.Iterator; import java.util.List ...

  6. 【Java入门提高篇】Day26 Java容器类详解(八)HashSet源码分析

    前面花了好几篇的篇幅把HashMap里里外外说了个遍,大家可能对于源码分析篇已经讳莫如深了.别慌别慌,这一篇来说说集合框架里最偷懒的一个家伙——HashSet,为什么说它是最偷懒的呢,先留个悬念,看完 ...

  7. 深入分析——HashSet是否真的无序?(JDK8)

    HashSet 是否无序 (一) 问题起因: <Core Java Volume I-Fundamentals>中对HashSet的描述是这样的: HashSet:一种没有重复元素的无序集 ...

  8. C#LeetCode刷题之#705-设计哈希集合​​​​​​​(Design HashSet)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4114 访问. 不使用任何内建的哈希表库设计一个哈希集合 具体地说 ...

  9. 黑马程序员——【Java基础】——集合框架

    ---------- android培训.java培训.期待与您交流! ---------- 一.集合框架概述 (一)集合框架中集合类关系简化图 (二)为什么出现集合类? 面向对象语言对事物的体现都是 ...

随机推荐

  1. MySQL中RESET SLAVE和RESET MASTER的区别

    RESET SLAVE的语法如下: RESET SLAVE [ALL] [channel_option] channel_option: FOR CHANNEL channel 其中,channel_ ...

  2. NAS与SAN

    1. NAS(Network Attached Storage,网络附加存储服务器) 简单地说,NAS就是一台File Server,只要将NAS连接上网络,那么在网络上面的其他主机就能够访问NAS上 ...

  3. React JS快速开始手册

    怎样用React JS构建一个用户界面?本文将快速地给你一个React JS的概览.代码,请君移步react-starter 概念 React只有很少的API,这使得它很容易去学习与理解.当然,使用它 ...

  4. 算法:KMP算法

    算法:KMP排序 算法分析 KMP算法是一种快速的模式匹配算法.KMP是三位大师:D.E.Knuth.J.H.Morris和V.R.Pratt同时发现的,所以取首字母组成KMP. 少部分图片来自孤~影 ...

  5. ECMAScript 6 开篇准备

    1前言 该系列文章均为学习阮一峰老师<ECMAScript 6 入门>一书的学习笔记.原著:http://es6.ruanyifeng.com/ 各大浏览器的最新版本,对ES6的支持可以查 ...

  6. git log命令全解析,打log还能这么随心所欲!

    git log命令非常强大而好用,在复杂系统的版本管理中扮演着重要的角色,但默认的git log命令显示出的东西实在太丑,不好好打扮一下根本没法见人,打扮好了用alias命令拍个照片,就正式出道了! ...

  7. 异步编程系列第04章 编写Async方法

    p { display: block; margin: 3px 0 0 0; } --> 写在前面 在学异步,有位园友推荐了<async in C#5.0>,没找到中文版,恰巧也想提 ...

  8. python之初体验

    1. Python简介: Python(英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种面向对象.解释型计算机程序设计语言,由Guido van Rossum于1989年发明, ...

  9. android largeheap 的设定

    现在公司在做tv端的APP,我的任务是视频点播功能,在看公司原有代码的基础上看到在manifiest里面设置了largeheap,所以查阅了一下资料,作为笔记 http://blog.csdn.net ...

  10. Hibernate 参数设置一览表

    Hibernate 参数设置一览表 属性名 用途 hibernate.dialect 一个Hibernate Dialect类名允许Hibernate针对特定的关系数据库生成优化的SQL. 取值 fu ...