Java中HashMap和HashSet的高效使用技巧分享
Java HashMap
HashMap 是一種哈希表,它存儲(chǔ)鍵值對(duì)。鍵用于查找值,就像數(shù)組中的索引一樣。HashMap 的優(yōu)勢(shì)在于它可以使用任何類(lèi)型作為鍵,并且查找速度很快。
創(chuàng)建 HashMap
// 導(dǎo)入 HashMap 類(lèi)
import java.util.HashMap;
public class Main {
public static void main(String[] args) {
// 創(chuàng)建一個(gè)名為 capitalCities 的 HashMap 對(duì)象,將存儲(chǔ) String 鍵和 String 值
HashMap<String, String> capitalCities = new HashMap<>();
}
}
添加項(xiàng)目
// 添加鍵和值(國(guó)家,城市)
capitalCities.put("England", "London");
capitalCities.put("Germany", "Berlin");
capitalCities.put("Norway", "Oslo");
capitalCities.put("USA", "Washington DC");
訪(fǎng)問(wèn)項(xiàng)目
// 獲取 England 的首都
String capitalOfEngland = capitalCities.get("England");
刪除項(xiàng)目
// 刪除 England 的首都
capitalCities.remove("England");
HashMap 大小
// 獲取 HashMap 中的項(xiàng)目數(shù)量 int size = capitalCities.size();
循環(huán)遍歷 HashMap
// 遍歷 HashMap 并打印鍵和值
for (String key : capitalCities.keySet()) {
String value = capitalCities.get(key);
System.out.println("Key: " + key + ", Value: " + value);
}
使用其他類(lèi)型
HashMap 可以存儲(chǔ)任何類(lèi)型的鍵和值。例如,您可以存儲(chǔ) Integer 鍵和 String 值:
// 創(chuàng)建一個(gè)名為 people 的 HashMap 對(duì)象,將存儲(chǔ) Integer 鍵和 String 值 HashMap<Integer, String> people = new HashMap<>(); // 添加鍵和值(ID,姓名) people.put(1, "John Doe"); people.put(2, "Jane Doe"); // 獲取 ID 為 1 的姓名 String name = people.get(1);
HashMap 是一種強(qiáng)大的數(shù)據(jù)結(jié)構(gòu),可用于存儲(chǔ)各種類(lèi)型的數(shù)據(jù)。它具有快速查找速度和靈活的鍵值對(duì)存儲(chǔ)機(jī)制,使其成為許多應(yīng)用程序的理想選擇。
HashMap 的優(yōu)勢(shì):
- 快速查找速度
- 可以存儲(chǔ)任何類(lèi)型的鍵和值
- 靈活的鍵值對(duì)存儲(chǔ)機(jī)制
HashMap 的劣勢(shì):
- 不是線(xiàn)程安全的
- 可能會(huì)出現(xiàn)哈希碰撞
建議:
- 如果需要快速查找數(shù)據(jù),請(qǐng)使用
HashMap。 - 如果需要線(xiàn)程安全的數(shù)據(jù)結(jié)構(gòu),請(qǐng)使用
ConcurrentHashMap。 - 如果需要避免哈希碰撞,請(qǐng)使用
LinkedHashMap。
Java HashSet
HashSet 是一個(gè)無(wú)序集合,其中每個(gè)元素都是唯一的。它基于哈希表實(shí)現(xiàn),因此查找速度很快。
創(chuàng)建 HashSet
// 導(dǎo)入 HashSet 類(lèi)
import java.util.HashSet;
public class Main {
public static void main(String[] args) {
// 創(chuàng)建一個(gè)名為 cars 的 HashSet 對(duì)象,將存儲(chǔ)字符串
HashSet<String> cars = new HashSet<>();
}
}
添加項(xiàng)目
// 添加項(xiàng)目
cars.add("Volvo");
cars.add("BMW");
cars.add("Ford");
cars.add("BMW"); // 不會(huì)重復(fù)添加
cars.add("Mazda");
// 查看 HashSet
System.out.println(cars);
檢查項(xiàng)目是否存在
// 檢查項(xiàng)目是否存在
boolean isPresent = cars.contains("Mazda");
// 輸出結(jié)果
System.out.println("Mazda 在 HashSet 中嗎? " + isPresent);
刪除項(xiàng)目
// 刪除項(xiàng)目
cars.remove("Volvo");
// 查看 HashSet
System.out.println(cars);
HashSet 大小
// 獲取 HashSet 大小
int size = cars.size();
// 輸出結(jié)果
System.out.println("HashSet 大小:" + size);
循環(huán)遍歷 HashSet
// 循環(huán)遍歷 HashSet
for (String car : cars) {
System.out.println(car);
}
使用其他類(lèi)型
HashSet 可以存儲(chǔ)任何類(lèi)型的元素。例如,您可以存儲(chǔ) Integer 元素:
// 創(chuàng)建一個(gè)名為 numbers 的 HashSet 對(duì)象,將存儲(chǔ)整數(shù)
HashSet<Integer> numbers = new HashSet<>();
// 添加元素
numbers.add(1);
numbers.add(2);
numbers.add(3);
// 循環(huán)遍歷 HashSet
for (int number : numbers) {
System.out.println(number);
}
HashSet 是一種非常有用的數(shù)據(jù)結(jié)構(gòu),可用于存儲(chǔ)各種類(lèi)型的數(shù)據(jù)。它具有快速查找速度和無(wú)序的特點(diǎn),使其成為許多應(yīng)用程序的理想選擇。
HashSet 的優(yōu)勢(shì):
- 快速查找速度
- 無(wú)序,可以更快地添加和刪除元素
- 允許存儲(chǔ)任何類(lèi)型的元素
HashSet 的劣勢(shì):
- 不保留元素的插入順序
- 可能會(huì)出現(xiàn)哈希碰撞
建議:
- 如果需要快速查找數(shù)據(jù)并且不需要保留元素的插入順序,請(qǐng)使用
HashSet。 - 如果需要保留元素的插入順序,請(qǐng)使用
LinkedHashSet。 - 如果需要避免哈希碰撞,請(qǐng)使用
TreeMap。
到此這篇關(guān)于Java中HashMap和HashSet的高效使用技巧分享的文章就介紹到這了,更多相關(guān)Java HashMap HashSet內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java LinkedHashSet集合的底層原理和TreeSet集合
- Java中的Set接口實(shí)現(xiàn)類(lèi)HashSet和LinkedHashSet詳解
- Java集合ArrayList、LinkedList、HashMap、HashSet最大容量
- Java中HashSet、LinkedHashSet和TreeSet區(qū)別詳解
- java的==運(yùn)算符和equals操作詳解
- Java中==和equals()的區(qū)別總結(jié)
- java兩個(gè)integer數(shù)據(jù)判斷相等用==還是equals
- 詳解Java中==和equals()的區(qū)別
- 淺談java字符串比較到底應(yīng)該用==還是equals
- java中的HashSet與 == 和 equals的區(qū)別示例解析
相關(guān)文章
java導(dǎo)出Excel通用方法的實(shí)例詳解
這篇文章主要介紹了java導(dǎo)出Excel通用方法的實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-07-07
淺談@RequestParam(required = true)的誤區(qū)
這篇文章主要介紹了@RequestParam(required = true)的誤區(qū),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11
Java多線(xiàn)程之異步Future機(jī)制的原理和實(shí)現(xiàn)
這篇文章主要為大家詳細(xì)介紹了Java多線(xiàn)程之異步Future機(jī)制的原理和實(shí)現(xiàn),感興趣的小伙伴們可以參考一下2016-08-08
springboot jpa實(shí)現(xiàn)優(yōu)雅處理isDelete的默認(rèn)值
如果多個(gè)實(shí)體類(lèi)都有 isDelete 字段,并且你希望在插入時(shí)為它們統(tǒng)一設(shè)置默認(rèn)值時(shí)改怎么做呢,本文為大家整理了一些方法,希望對(duì)大家有所幫助2024-11-11
Java中實(shí)現(xiàn)線(xiàn)程間通信的實(shí)例教程
線(xiàn)程通信的目標(biāo)是使線(xiàn)程間能夠互相發(fā)送信號(hào),另一方面線(xiàn)程通信使線(xiàn)程能夠等待其他線(xiàn)程的信號(hào),這篇文章主要給大家介紹了關(guān)于Java中實(shí)現(xiàn)線(xiàn)程間通信的相關(guān)資料,本文通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2021-09-09
SpringbootJPA分頁(yè) PageRequest過(guò)時(shí)的替代方法
這篇文章主要介紹了SpringbootJPA分頁(yè) PageRequest過(guò)時(shí)的替代方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06

