簡體   English   中英

如何訪問Hashmap的鍵並將它們與預定值進行比較?

[英]How to access the keys of a Hashmap and compare them with a predetermined value?

我有這個哈希圖:

HashMap<String, Student> students = new HashMap<String, Student>();

從用戶輸入(sNo,name)獲得2個String值后,我已經能夠將它們像這樣放入hashmap中:

students.put(sNo, new Student(sNo, name));

我的問題是,每次我執行此過程時,我都希望能夠檢查Hashmap鍵,以確保輸入sNo與以前使用的輸入不同。

我嘗試了if(sNo == students.keySet())但這不起作用。

如果說5(sNo)與一個對象(keySet())相同,那么您所做的就是比較。 您將始終無法滿足此條件。 您要查找的是查詢keySet,如果其中包含sNo值。

if (students.keySet().has(sNo))

Map通過這種方式提供了一種快捷方式:

if (students.containsKey(sNo))

同樣,作為一個旁注,在Java中,我們這樣編寫:

Map<Integer, Student> students = new HashMap<>();

上面的代碼表明,students變量是一個以Integer為鍵,而Student為值的Map。 實際的地圖實現未知,您不應該真正在意它。 然后,創建一個HashMap,它是Map接口的實際實現,並使用所謂的菱形運算符<>告訴編譯器,鍵和值與變量聲明中的鍵和值相同。

您必須使用循環來一次與哈希圖中當前的所有鍵進行比較。 這樣,您將sNo與key1進行比較,然后將sNo與key2進行比較,等等。

(sNo == students.keySet())

嘗試將一個鍵與整個鍵集進行比較,這對計算機沒有意義。 比較“事物”時,兩個“事物”都必須是相同的類型,在這種情況下,應為“字符串”。 循環的語法是

for(String s: students.keySet()){
//body
}

這個for循環的意思是“對於鍵集中的每個字符串...(正文:將sNo與s比較)”,然后在正文中進行比較。

重要!:您不應將字符串與“ ==”進行比較,而應將其與.equals()進行比較。 例如,不要

if(sNo == s)

反而

if(sNo.equals(s))

如果您想知道我的s在哪里,請查看for循環。 對於鍵集中的每個String,它都分配給s變量。 既然有了for循環,請比較鍵集中的每個字符串和當前鍵sNo。

如果僅想確保在插入HashMap時該密鑰尚未存在,則可以使用putIfAbsent(K key, V value)方法:

Student s = students.putIfAbsent(sNo, new Student(sNo, name));

如果條目已經存在,則由方法返回,否則該方法將條目插入到映射中並返回null

if (s != null) {
    System.out.println("Student "+s.getSno()+" already exists");
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM