簡介
HashSet類,是存在於java.util包中的類 。同時也被稱為集合,該容器中只能存儲不重復的對象。本文主要介紹Java HashSet使用方法教程及示例代碼,還有HashMap和HashSet的區別。
1、Java HashSet
HashSet實現了Set接口,它不允許集合中有重復的值,當將對象存儲在HashSet之前,要先確保對象重寫equals()和hashCode()方法,這樣才能比較對象的值是否相等,以確保set中沒有儲存重復的對象。如果我們沒有重寫這兩個方法,將會使用這個方法的默認實現。
例如:
創建一個名為langs的HashSet對象,該對象將存儲字符串:
import java.util.HashSet; // 導入HashSet HashSet<String> langs = new HashSet<String>();
2、訪問HashSet中的元素
HashSet類具有許多有用的方法。 例如,要向其中添加元素,請使用add()方法:
例如:
// 導入HashSet import java.util.HashSet; public class Main { public static void main(String[] args) { HashSet<String> langs = new HashSet<String>(); langs.add("c"); langs.add("java"); langs.add("python"); langs.add("cjavapy"); langs.add("javascript"); System.out.println(langs); } }
注意:集合中的每個元素都必須是唯一的。
3、判斷HashSet中的元素
要判斷HashSet中是否存在某個元素,請使用contains()方法:
例如:
langs.contains("cjavapy");
4、刪除HashSet中的元素
要刪除元素,請使用remove()方法:
例如:
langs.remove("cjavapy");
要刪除所有元素,請使用clear()方法:
例如:
langs.clear();
5、HashSet size
要找出有多少個元素,需要使用size方法:
例如:
langs.size();
6、循環遍歷HashSet中的元素
通過for-each循環遍歷HashSet的元素:
例如:
for (String i : langs) { System.out.println(i); }
7、其它類型
HashSet中的項目實際上是對象。在上面的示例中,我們創建了 項目 (對象)類型為字符串。Java中的String是一個對象(不是原始類型)。要使用其他類型,例如int,必須指定等效的包裝類:Integer。對於其他基本類型,請使用:Boolean表示布爾值,Character表示char,Double表示double,等等。
基本類型對應的包裝類表如下:
| 基本類型 |
引用類型 |
| boolean |
Boolean |
| byte |
Byte |
| short |
Short |
| int |
Integer |
| long |
Long |
| float |
Float |
| double |
Double |
| char |
Character |
例如:
使用存儲Integer對象的HashSet:
import java.util.HashSet; public class Main { public static void main(String[] args) { // 創建HashSet對象 HashSet<Integer> numbers = new HashSet<Integer>(); // 添加 numbers.add(4); numbers.add(5); numbers.add(8); // 判斷指定值是否包含 for(int i = 1; i <= 10; i++) { if(numbers.contains(i)) { System.out.println(i + " 存在numbers中"); } else { System.out.println(i + " 存在numbers中"); } } } }
8、HashMap和HashSet的區別
1) HashSet實現了Set接口, 僅存儲對象; HashMap實現了 Map接口, 存儲的是鍵值對.
2) HashSet底層其實是用HashMap實現存儲的, HashSet封裝了一系列HashMap的方法. 依靠HashMap來存儲元素值,(利用hashMap的key鍵進行存儲), 而value值默認為Object對象. 所以HashSet也不允許出現重復值, 判斷標准和HashMap判斷標准相同, 兩個元素的hashCode相等並且通過equals()方法返回true。
| HashMap |
HashSet |
| HashMap實現了Map接口 |
HashSet實現了Set接口 |
| HashMap儲存鍵值對 |
HashSet僅僅存儲對象 |
| 使用put()方法將元素放入map中 |
使用add()方法將元素放入set中 |
| HashMap中使用鍵對象來計算hashcode值 |
HashSet使用成員對象來計算hashcode值, 對於兩個對象來說hashcode可能相同, 所以equals()方法用來判斷對象的相等性, 如果兩個對象不同的話,那么返回false |
| HashMap比較快,因為是使用唯一的鍵來獲取對象 |
HashSet較HashMap來說比較慢 |
原文地址:https://www.cjavapy.com/article/1624/
