HashSet介绍

这个类实现了Set接口,背后是一个hash table(实际上是个HashMap 实例) 。它不保证元素的迭代顺序。尤其是,随着时间推

移它不保证某一元素的位置不变。这个类是非线程安全的,不过可以通过以下方式显式实现:

Set s = Collections.synchronizedSet(new HashSet(...));

HashSet特点

1)HashSet 不维护任何顺序, 元素将以随机顺序返回。

2)HashSet 不允许有重复元素, 如果你试图添加重复元素, 旧有的元素值将被覆盖

3)HashSet 允许有null值,然而如果你插入多个null它将只返回一个。

4)HashSet 是非线程安全的。

5)这个类返回的迭代器是快速失败的,也就是说如果你在创建迭代器之后又去修改HashSet,迭代器将抛出ConcurrentModificationException异常,除非你调用的是迭代器的remove方法。

HashSet日常操作

1.基本例子

package com.dylan.collection;

import java.util.HashSet;

/**
* @author xusucheng
* @create 2018-01-27
**/
public class HashSetExample {
public static void main(String args[]) {
// HashSet declaration
HashSet<String> hset =
new HashSet<String>(); // Adding elements to the HashSet
hset.add("Apple");
hset.add("Mango");
hset.add("Grapes");
hset.add("Orange");
hset.add("Fig");
//Addition of duplicate elements
hset.add("Apple");
hset.add("Mango");
//Addition of null values
hset.add(null);
hset.add(null); //Displaying HashSet elements
System.out.println(hset);
}
}

输出:

[null, Apple, Grapes, Fig, Mango, Orange]

2.删除所有元素

package com.dylan.collection;

import java.util.HashSet;

/**
* @author xusucheng
* @create 2018-01-27
**/
public class EmptyHashSetExample {
public static void main(String[] args) {
// Create a HashSet
HashSet<String> hset = new HashSet<String>(); //add elements to HashSet
hset.add("Element1");
hset.add("Element2");
hset.add("Element3");
hset.add("Element4");
hset.add("Element5"); // Display HashSet elements
System.out.println("Before: HashSet contains: "+ hset); /* public void clear(): It removes all the elements
* from HashSet. The set becomes empty after this
* method gets called.
*/
hset.clear(); // Display HashSet content again
System.out.println("After: HashSet contains: "+ hset);
}
}

输出:

Before: HashSet contains: [Element5, Element4, Element3, Element2, Element1]
After: HashSet contains: []

3.如何迭代

3.1 使用Iterator
3.2 使用for循环
package com.dylan.collection;

import java.util.HashSet;
import java.util.Iterator; /**
* @author xusucheng
* @create 2018-01-27
**/
public class IterateHashSet {
public static void main(String[] args) {
// Create a HashSet
HashSet<String> hset = new HashSet<String>(); //add elements to HashSet
hset.add("Chaitanya");
hset.add("Rahul");
hset.add("Tim");
hset.add("Rick");
hset.add("Harry");
//1.use Iterator
System.out.println("----use Iterator:");
Iterator<String> it = hset.iterator();
while(it.hasNext()){
System.out.println(it.next());
} //2.use loop
System.out.println("----use loop:");
for (String temp : hset) {
System.out.println(temp);
}
}
}

输出:

----use Iterator:
Chaitanya
Rahul
Harry
Tim
Rick
----use loop:
Chaitanya
Rahul
Harry
Tim
Rick

4.转换为数组

package com.dylan.collection;

import java.util.HashSet;

/**
* @author xusucheng
* @create 2018-01-27
**/
public class ConvertHashSettoArray {
public static void main(String[] args) {
// Create a HashSet
HashSet<String> hset = new HashSet<String>(); //add elements to HashSet
hset.add("Element1");
hset.add("Element2");
hset.add("Element3");
hset.add("Element4"); // Displaying HashSet elements
System.out.println("HashSet contains: "+ hset); // Creating an Array
String[] array = new String[hset.size()];
hset.toArray(array); // Displaying Array elements
System.out.println("Array elements: ");
for(String temp : array){
System.out.println(temp);
}
}
}

输出:

HashSet contains: [Element4, Element3, Element2, Element1]
Array elements:
Element4
Element3
Element2
Element1

5.转换为TreeSet

package com.dylan.collection;

import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet; /**
* @author xusucheng
* @create 2018-01-27
**/
public class ConvertHashSettoTreeSet {
public static void main(String[] args) {
// Create a HashSet
HashSet<String> hset = new HashSet<String>(); //add elements to HashSet
hset.add("Element1");
hset.add("Element2");
hset.add("Element3");
hset.add("Element4"); // Displaying HashSet elements
System.out.println("HashSet contains: "+ hset); // Creating a TreeSet of HashSet elements
Set<String> tset = new TreeSet<String>(hset); // Displaying TreeSet elements
System.out.println("TreeSet contains: ");
for(String temp : tset){
System.out.println(temp);
}
}
}

输出:

HashSet contains: [Element4, Element3, Element2, Element1]
TreeSet contains:
Element1
Element2
Element3
Element4

6.转换为List/ArrayList

package com.dylan.collection;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List; /**
* @author xusucheng
* @create 2018-01-27
**/
public class ConvertHashSetToArrayList {
public static void main(String[] args) {
// Create a HashSet
HashSet<String> hset = new HashSet<String>(); //add elements to HashSet
hset.add("Steve");
hset.add("Matt");
hset.add("Govinda");
hset.add("John");
hset.add("Tommy"); // Displaying HashSet elements
System.out.println("HashSet contains: "+ hset); // Creating a List of HashSet elements
List<String> list = new ArrayList<String>(hset); // Displaying ArrayList elements
System.out.println("ArrayList contains: "+ list);
}
}

输出:

HashSet contains: [Matt, Steve, Govinda, John, Tommy]
ArrayList contains: [Matt, Steve, Govinda, John, Tommy]

HashSet 对比 HashMap

1.相同点

1)两者都是非线程安全的。

2)都不保证元素的顺序

3)如果你看了HashSet源码就知道它的背后是HashMap在支持其各种操作。

4)两者在添加,删除元素等操作时的性能一致。

2.不同点

HashSet HashMap
实现的是Set接口 实现的是Map接口
存储的是对象(元素或值),例如我有一个存储String元素的HashSet,
我可以这样描述:[null, Apple, Grapes, Fig, Mango, Orange]
存储的是Key&Value(键值对)
不允许有重复值 不允许有重复Key,但可以有多个重复value
只允许有一个null元素 允许有一个null key, null的value可以有多个

Java集合框架学习(二) HashSet详解的更多相关文章

  1. Hibernate框架学习(二)——api详解

    一.Configuration对象 功能:配置加载类,用于加载主配置,orm元数据加载. //1.创建,调用空参构造(还没有读配置文件) Configuration conf=new Configur ...

  2. Java集合框架学习(一)List

    先附一张Java集合框架图. 从上面的集合框架图可以看到,Java集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射.Coll ...

  3. Java集合框架学习

    集合框架 集合框架的目标 该框架必须是高性能的.基本集合(动态数组,链表,树,哈希表)的实现必须是高效的. 该框架允许 不同类型的集合,以类似的方式工作,具有高度的互操作性. 对一个集合的扩展和适应必 ...

  4. java集合的方法及使用详解

    一.java集合的分类及相互之间的关系 Collection接口:向下提供了List和Set两个子接口 |------List接口:存储有序的,存储元素可以重复 |------ArrayList(主要 ...

  5. Java 集合Collection与List的详解

    1.什么是集合 存储对象的容器,面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,存储对象,集合是存储对象最常用的一种方式. 集合的出现就是为了持有对象.集合中可以存储任意类型的 ...

  6. 【java基础 11】java集合框架学习

    导读:本篇博客主要是从整体上了解java的集合框架,然后主要介绍几个自己在项目中用到的结构,比如说:hashtable.hashmap.hashset.arraylist等! 一.宏观预览 从宏观上看 ...

  7. Java后端框架之Spring Boot详解,文末有Java分布式实战项目视频可取

    在 Java 后端框架繁荣的今天,Spring 框架无疑是最最火热,也是必不可少的开源框架,更是稳坐 Java 后端框架的龙头老大. 用过 Spring 框架的都知道 Spring 能流行是因为它的两 ...

  8. java集合框架(二):HashTable

    HashTable作为集合框架中的一员,现在是很少使用了,一般都是在面试中会问到其与HashMap的区别.为了能在求职的时候用上场,我们有必要对其原理进行解读. HashTable的实现原理跟Hash ...

  9. Java集合框架学习笔记

    集合类的由来:对象用于封装特有数据,对象多了需要存储,如果对象的长度不确定,就使用集合存储. 集合特点1.用于存储对象的容器.2.集合的长度可变.3.集合中不可以存储基本类型 集合容器因为内部的数据结 ...

  10. Java集合框架(二)

    原文  http://www.jianshu.com/p/2070cb32accb List接口 查阅API,看 List 的介绍.有序的 collection (也称为序列).此接口的用户可以对列表 ...

随机推荐

  1. [转帖]三篇文章了解 TiDB 技术内幕 - 谈调度

    返回全部 申砾产品技术解读2017-06-06 为什么要进行调度 先回忆一下 三篇文章了解 TiDB 技术内幕 - 说存储提到的一些信息,TiKV 集群是 TiDB 数据库的分布式 KV 存储引擎,数 ...

  2. [转帖]DOCKER默认网段和主机网段冲突解决

    https://www.cnblogs.com/yinliang/p/13189334.html 一. docker默认网卡docker0 172.17.0.0可能会与主机冲突,这时候需要修改dock ...

  3. [转帖]3.3.7. 自动诊断和建议报告SYS_KDDM

    https://help.kingbase.com.cn/v8/perfor/performance-optimization/performance-optimization-6.html#sys- ...

  4. [转帖]在KingbaseES数据库中批量创建数据库/表

    1. 问题 如何在KingbaseES中批量创建表和库? 2. 通过shell脚本文件实现 有时候我们在进行测试的时候需要进行批量的建库以及建表,这时我们可以使用shell脚本实现或者是SQL实现,s ...

  5. nginx 负载均衡简单设置

    自己简单维护了一个 需要继续改进. user nobody; worker_processes auto; events { worker_connections 1024; } http { inc ...

  6. iframe父页面传递参数给子页面

    父页面通过ifarame传递参数 有些时候,我们需要在嵌套页面. 我们就需要使用iframe了. 通过iframe传递参数给子页面. 需求描述,当我们点击按钮的时候. 传递参数给子页面.子页面接受后展 ...

  7. RN 表单TextInput的用法

    你要注意安卓和苹果是不同的哈 有些属性是苹果才有的,有些是安卓独有的 有些两个都有哈 // 边框要设置两个属性哈 borderColor: 'pink', marginTop: 10, 具体看地址 h ...

  8. 01 vue子组件调用父组件中的方法

    vue子组件,调用父组件中有三种方法哈!下面我们一起来讲解. 第一种使用 直接在子组件中通过this.$parent.父组件中的方法.来调用父组件的方法 第一种的缺点是不能够传递参数哈.它只能够调用方 ...

  9. Promise练习文件读取

    1. fs读取文件 const fs=require('fs');//引入文件读取模块 fs.readFile('./README.md',(err,data)=>{ // 如果出现错误,抛出错 ...

  10. 4款超好用的AI换脸软件,一键视频直播换脸(附下载链接)

    随着AIGC的火爆,AI换脸技术也被广泛应用于娱乐.广告.电影制作等领域,本期文章系统介绍了市面上超火的4款AI软件 换脸整合包收录了全部4款AI工具,请按照需要选择下载: 百度网盘:https:// ...