java中的HashMap 是一個類,是java集合的一部分。它實現了java的Map接口。它以鍵和值對的形式存儲數據。鍵應該是唯一的,但值可以重複。如果您嘗試插入重複的鍵,它將替換相應鍵的元素。 HashMap與哈希表類似,但它是不同步的。它允許存儲空鍵和空值,但應該隻有一個空鍵,並且可以有任意數量的空值。
IdentityHashMap實施Map接口。比較鍵(和值)時,它遵循 reference-equality 代替 object-equality。當用戶需要通過引用比較對象時使用該類。它不同步,必須外部同步。這個類中的迭代器是fail-fast,拋出ConcurrentModificationException 嘗試在迭代時進行修改。
HashMap 和IdentityHashMap 都是實現Map 接口的類。但它們之間幾乎沒有什麽區別。
示例 1:HashMap
Java
// Java program to illustrate
// the working of Java HashMap
// to demonstrate
// internal working difference between them
// Importing HashMap class from
// java.util package
import java.util.HashMap;
// Class
public class GFG {
// Main driver method
public static void main(String[] args)
{
// Creating an empty HashMap object
HashMap<Integer, String> map = new HashMap<>();
// Add elements to the map
// Custom inputs
map.put(10, "Geeks");
map.put(20, "for");
map.put(30, "geeks");
map.put(40, "welcome");
map.put(50, "you");
// Printing the size of map
System.out.println("Size of map is:- "
+ map.size());
// Printing the HashMap content
System.out.println("HashMap content: " + map);
// Removing a key 50
map.remove(50);
// Printing the HashMap after the removal
System.out.println("HashMap after removal : "
+ map);
}
}
輸出
Size of map is:- 5 HashMap content: {50=you, 20=for, 40=welcome, 10=Geeks, 30=geeks} HashMap after removal : {20=for, 40=welcome, 10=Geeks, 30=geeks}
示例 2:IdentityHashMap
Java
// Java program to illustrate
// working of IdentityHashmap
// to demonstrate
// internal working difference between them
// Importing all classes of
// java.util package
import java.util.*;
// Class for iterating IdentityHashMap
public class GFG {
// Main driver method
public static void main(String[] args)
{
// Creating an empty IdentityHashMap object
IdentityHashMap<Integer, String> ihmap
= new IdentityHashMap<Integer, String>();
// Mapping string values to int keys
// Custom inputs --> Custom mappings
ihmap.put(10, "Geeks");
ihmap.put(20, "for");
ihmap.put(30, "Geeks");
ihmap.put(40, "Welcomes");
ihmap.put(50, "You");
// Display the size of IdentityHashMap
System.out.println("IdentityHashMap size : "
+ ihmap.size());
// Display the IdentityHashMap
System.out.println("Initial identity hash map: "
+ ihmap);
// Create an Iterator over the IdentityHashMap
Iterator<IdentityHashMap.Entry<Integer, String> >
itr = ihmap.entrySet().iterator();
// Condition check using hasNext() method()
// Condition check using hasNext() method holding
// true if there is any next element remaining
while (itr.hasNext()) {
// next() method which is used to
// retrieve the next element
IdentityHashMap.Entry<Integer, String> entry
= itr.next();
// Print and display key and value pairs
// using getKey() method
System.out.println("Key = " + entry.getKey()
+ ", Value = "
+ entry.getValue());
}
}
}
輸出
IdentityHashMap size : 5 Initial identity hash map: {10=Geeks, 40=Welcomes, 50=You, 30=Geeks, 20=for} Key = 10, Value = Geeks Key = 40, Value = Welcomes Key = 50, Value = You Key = 30, Value = Geeks Key = 20, Value = for
Difference between HashMap and IdentityHashMap in Java
S.NO. | HashMap | 身份哈希映射 |
---|---|---|
1. | HashMap實現了Map接口,但並不違反Map通用契約。 | IdentityHashMap也實現了Map接口,但它故意違反了Map通用契約。 |
2. | HashMap 使用對象相等性來比較鍵和值。 | IdentityHashMap 使用引用相等來比較鍵和值。 |
3. | HashMap使用HashMap類的hashCode()方法來查找存儲桶位置。 | IdentityHashMap 不使用 hashCode() 方法,而是使用 System.IdentityHashCode() 方法來查找存儲桶位置。 |
4. | HashMap 使用鏈接。 | IdentityHashMap 使用a 簡單線性探測哈希表。 |
5. | 為了安全地將對象存儲在HashMap中, key 需要是不可變的。 | IdentityHashMap 不要求 key 不可變。 |
6. | HashMap 的性能略低於 IdentityHashMap。 | IdentityHashMap 比 HashMap 性能更好。 |
相關用法
- Java HashMap和HashTable的區別用法及代碼示例
- Java HashMap clear()用法及代碼示例
- Java HashMap clone()用法及代碼示例
- Java HashMap isEmpty()用法及代碼示例
- Java HashMap size()用法及代碼示例
- Java HashMap put()用法及代碼示例
- Java HashMap putAll()用法及代碼示例
- Java HashMap putIfAbsent()用法及代碼示例
- Java HashMap remove()用法及代碼示例
- Java HashMap containsKey()用法及代碼示例
- Java HashMap containsValue()用法及代碼示例
- Java HashMap replace()用法及代碼示例
- Java HashMap replaceAll()用法及代碼示例
- Java HashMap get()用法及代碼示例
- Java HashMap getOrDefault()用法及代碼示例
- Java HashMap forEach()用法及代碼示例
- Java HashMap entrySet()用法及代碼示例
- Java HashMap keySet()用法及代碼示例
- Java HashMap values()用法及代碼示例
- Java HashMap merge()用法及代碼示例
- Java HashMap compute()用法及代碼示例
- Java HashMap computeIfAbsent()用法及代碼示例
- Java HashMap computeIfPresent()用法及代碼示例
- Java HashMap forEach(BiConsumer)用法及代碼示例
- Java HashMap replaceAll(BiFunction)用法及代碼示例
注:本文由純淨天空篩選整理自prashant_srivastava大神的英文原創作品 Difference between HashMap and IdentityHashMap in Java。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。