[TOC]
## **1 什么是Java HashSet**
Java HashSet类用于创建使用哈希表进行存储的集合。它继承了AbstractSet类并实现Set接口。
Java HashSet类的核心要点是:
* HashSet通过使用一种称为**哈希**的机制来存储元素。
* HashSet不能存放重复元素。
* HashSet允许为空值。
* HashSet类是非同步的(线程不安全)。
* HashSet元素是无序的。因为元素是根据其哈希码插入的。
* HashSet方便检索数据。
* HashSet的初始默认容量为16,而负载因子为0.75。
<br>
<br>
## **2 List和Set的区别**
List可以包含重复元素,而Set仅包含唯一元素。
<br>
<br>
## **3 Java HashSet的层次结构**
:-: ![](https://img.kancloud.cn/72/6b/726bd93687af7bff5e67de3cabac6dfb_161x363.png)
HashSet类继承了实现Set接口的AbstractSet类。Set接口继承Collection和Iterable接口。
<br>
<br>
## **4 Java HashSet的语法**
~~~
public class HashSet extends AbstractSet implements Set, Cloneable, Serializable
~~~
<br>
<br>
## **5 Java HashSet的构造方法**
<br>
<br>
| 构造方法 | 描述 |
| --- | --- |
| HashSet() | 用于构造默认的HashSet。 |
| HashSet(int capacity) | 用于将HashSet的容量初始化为给定的整数容量。随着将元素添加到HashSet中,容量会自动增长。 |
| HashSet(int capacity, float loadFactor) | 用于将HashSet的容量初始化为给定的整数容量和指定的负载因子。 |
| HashSet(Collection c) | 用于通过使用集合来初始化HashSet。 |
## **6 Java HashSet的方法**
<br>
<br>
| 修饰符 | 方法 | 描述 |
| --- | --- | --- |
| boolean | [add(E e)]() | 如果指定的元素尚不存在,则用于将其添加到此集合中。 |
| void | [clear()]() | 用于删除集合中的所有元素。 |
| object | [clone()]() | 用于返回此HashSet实例的浅表副本:元素本身未克隆。 |
| boolean | [contains(Object o)]() | 如果此集合包含指定的元素,则用于返回true。 |
| boolean | [isEmpty()]() | 如果此集合不包含任何元素,则用于返回true。 |
| Iterator | [iterator()]() | 用于返回此集合中元素的迭代器。 |
| boolean | [remove(Object o)]() | 如果存在指定元素,则用于从该集合中删除该元素。 |
| int | [size()]() | 用于返回集合中的元素数。 |
| Spliterator | [spliterator()]() | Java1.8引入的一种并行遍历的机制 |
<br>
<br>
## **7 Java HashSet的例子**
HashSet 类位于 java.util 包中,使用前需要引入它,语法格式如下:
~~~
import java.util.HashSet; // 引入 HashSet 类
~~~
以下实例我们创建一个 HashSet 对象 set,用于保存字符串元素:
~~~
HashSet<String> set = new HashSet<String>();
~~~
让我们看一个简单的HashSet示例。注意,元素在无序集合中进行迭代。
```
import java.util.HashSet;
public class day01hashset01{
public static void main(String []args){
HashSet<String> set = new HashSet();
set.add("张小虎");
set.add("王小龙");
set.add("李小白");
set.add("赵小黑");
set.add("刘小红");
set.add("刘小红"); // 重复的元素不会被添加
System.out.println(set);
}
}
```
**运行结果:**
在上面的实例中,刘小红 被添加了两次,它在集合中也只会出现一次,因为集合中的每个元素都必须是唯一的。
<br>
<br>
## 8 **Java HashSet排除重复元素**
```
import java.util.HashSet;
import java.util.Iterator; // 导入Iterator类
public class day02hashset02{
public static void main(String []args){
HashSet<String> set = new HashSet<String>();
set.add("I`m zhangsan");
set.add("I`m yangba");
set.add("I`m maqi");
set.add("I`m zhangliu");
set.add("I`m wangwu");
set.add("I`m lisi");
Iterator<String> it=set.iterator(); // Iterator迭代器
while(itr.hasNext()){ // 使用hasNext()检查序列中是否还有元素。
System.out.println(it.next()); // 使用next()获得序列中的下一个元素。
}
}
}
```
**代码解析:**
1. **HashSet<String> set = new HashSet<String>();** 我们创建一个 HashSet 对象 set,用于保存字符串元素:
2. **Iterator<String> itr=set.iterator();** 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。注意:iterator()方法是java.lang.Iterable接口,被Collection继承。
3. **while(itr.hasNext())** // 使用hasNext()检查序列中是否还有元素。如果有则返回true
4. **it.next()** next()获得序列中的下一个元素。
<br>
Iterator这个类,后面接着说
<br>
<br>
## **9 Java HashSet删除元素**
```
import java.util.HashSet;
import java.util.Iterator;
public class day03hashsetromve{
public static void main(String[] args){
HashSet<String> set = new HashSet<String>();
set.add("baidu");
set.add("alibaba");
set.add("tengx");
set.add("Google");
set.add("IBM");
System.out.println("init data :" + set);
// 删除元素
set.remove("tengx"); // // 删除元素,删除成功返回 true,否则为 false
System.out.println("use remove after :" + set);
HashSet<String> set_one = new HashSet<String>();
set_one.add("new1");
set_one.add("new2");
set.addAll(set_one);
System.out.println("to update after data :" + set);
// 删除指定元素
set.removeIf(str->str.contains("new2"));
System.out.println("invoking removeIf after :" + set);
// 清空所有元素
set.clear();
System.out.println("invoking clear after :" + set);
}
}
```
**运行结果:**
```
init data :[alibaba, Google, IBM, baidu, tengx]
use remove after :[alibaba, Google, IBM, baidu]
to update after data :[alibaba, Google, new2, new1, IBM, baidu]
invoking removeIf after :[alibaba, Google, new1, IBM, baidu]
invoking clear after :[ ]
```
<br>
<br>
## **10 用Collection构造HashSet**
```
import java.util.HashSet;
import java.util.ArrayList;
import java.util.Iterator;
public class day04ArrayList_structure_Hash{
public static void main(String[]args){
ArrayList<String> list = new ArrayList<String>();
list.add("tom");
list.add("jack");
list.add("rose");
HashSet<String> set = new HashSet(list);
set.add("dear");
Iterator<String> it = set.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}
```
**运行结果:**
tom
rose
dear
jack
<br>
<br>
## **11:判断元素是否存在**
我们可以使用 contains() 方法来判断元素是否存在于集合当中:
```
import java.util.HashSet;
public class day05HashSet05{
public static void main(String[]args){
HashSet<String> set = new HashSet<String>();
set.add("w");
set.add("f");
set.add("h");
System.out.println(set.contains("beijing"));// 返回false
if(set.contains("beijing")){
System.out.println("存在");
}else{
System.out.println("不存在");
}
}
}
```
- Java自动化测试
- 第一章:Java:基础内容
- 1.1:Java:Hello Word
- 1.2:Java:热身
- 1.3:Java:注释
- 1.4:Java:标识符
- 1.5:Java:常量
- 1.6:Java:基本数据类型
- 1.7:Java:引用类型
- 1.8:Java:String类
- 第二章:Java:运算符
- 2.1:Java:算数运算符
- 2.2:Java:关系运算符
- 2.3:Java:逻辑运算
- 2.4:Java:赋值运算符
- 2.5;Java:三元运算符
- 2.6:Java:位运算符
- 第三章:Java:循环控制语句
- 3.1:Java:for循环
- 3.2:Java:while循环
- 3.3:Java:switch
- 3.4:Java:if else
- 3.5:Java:练习题
- 第四章:Java:函数与全局/局部变量
- 4.1:Java:局部变量
- 4.2:Java:全局变量
- 第五章:Java:方法
- 5.1:Java:初识方法
- 5.2:Java:方法调用
- 5.3:Java:方法重载
- 5.4:Java:构造方法
- 5.5:Java:方法的注意事项
- 第六章:Java:面向对象
- 6.1:Java:小案例
- 6.2:Java:this 关键字
- 6.3:Java:super 关键字
- 6.4:Java:static 关键字
- 6.5:Java:final关键字
- 6.6:Java:instanceof 运算符
- 6.7:Java:面向对象之封装
- 6.8:Java:面向对象之继承
- 6.9:Java:面向对象之多态
- 第七章:Java:面向对象高级进阶
- 7.1:Java:抽象类
- 7.2:Java:Java中String类
- 7.3:Java:interface接口
- 7.4:Java:ArrayList
- 7.5:Java:HashSet
- 7.6:Java:HashMap
- 7.7:Java:反射(reflection)
- 第八章:Java:日志以及异常捕获
- 8.1:Java:log4j
- 8.2:Java:异常初识基础
- 8.3:Java:未被捕获的异常
- 8.4:Java:try和catch的使用
- 8.5:Java:多重catch语句的使用
- 8.6:Java:throws/throw 关键字
- 8.7:Java:finally关键字
- 8.8:Java:自定义异常
- 第九章:Java:xml and IO
- 9.1:Java:IO基本概念
- 9.2:java:properties
- 9.3:Java:xml基本介绍
- 9.4:Java:xml操作实例
- 第十章:Java:JDBC编程
- 10.1:Java:JDBC介绍
- 10.2:Java:JDBC查询
- 10.3:Java:JDBC插入
- 10.4:Java:Batch
- 10.5:Java:JDBC连接池
- 第十一章:Java:TestNG
- 11.1:java:TestNG简介
- 11.2:Java:TestNG小实例
- 11.3:Java:TestNG.xml文件配置
- 11.4:Java:TestNG基本注解
- 11.5:Java:TestNG注解代码
- 11.6:Java:TestNG预期异常
- 11.7:Java:TestNG忽略测试
- 11.8:Java:TestNG超时测试
- 11.9:Java:TestNG分组测试