[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的層次結構**
:-: 
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分組測試