---
title: IdentityHashMap
url: 'https://www.tutego.de/blog/javainsel/2013/10/identityhashmap'
markdown: 'https://www.tutego.de/blog/javainsel/2013/10/identityhashmap.md'
date: '2013-10-03'
description: 'Es gibt eine besondere Datenstruktur mit dem Namen IdentityHashMap, die statt der internen equals(…)-Vergleiche einen Identitätsvergleich mit == durchführt. Die Implementierung ist selten im Einsatz, kann aber im Bereich der Performance-Optimierung eine interessante Rolle übernehmen und auch das Pr…'
taxonomy:
  category:
    - Allgemein
---

# IdentityHashMap

![Illustration einer tropischen Insel mit Palmen und einem hohen Berg](https://www.tutego.de/blog/javainsel/user/themes/tutego/images/insel-cover.jpg)# Java Blog für Programmierer

[Java Blog für Programmierer](https://www.tutego.de/blog/javainsel/)

## IdentityHashMap

03.10.2013 · [Christian Ullenboom](https://www.tutego.de/blog/javainsel/author/admin/)

Es gibt eine besondere Datenstruktur mit dem Namen IdentityHashMap, die statt der internen `equals(…)`-Vergleiche einen Identitätsvergleich mit == durchführt. Die Implementierung ist selten im Einsatz, kann aber im Bereich der Performance-Optimierung eine interessante Rolle übernehmen und auch das Problem lösen, wenn in der `Map` denn absichtlich Objekte enthalten sein sollen, die equals-gleich, aber nicht identisch sind. Es lässt sich auch so sehen: IdentityHashMap ist attraktiv, wenn als Schlüssel Objekte zum Einsatz kommen, bei denen Gleichheit und Identität dasselbe bedeuten.

Hinweis: An `Integer`-Objekten in einer IdentityHashMap zeigt sich genau der Unterschied zur klassischen `Map`, wie einer `HashMap`. Nehmen wir

```java
Integer key1 = 1;
Integer key2 = 1;
Integer key3 = 1000;
Integer key4 = 1000;
```

dann sind wegen dem Autoboxing und wegen dem internen Cache key1 == key2, aber key3 != key4 (die `Integer`-Klasse cached standardmäßig Ganzzahlen im Wertebereich eines byte). Anfragen mit equals-gleichen `Integer`-Objekten sind in der `HashMap` üblich, laufen aber bei IdentityHashMap ins Leere, da es unmöglich ist, zum Beispiel später über `Integer.value(1000)` ein genau identisches `Integer`-Objekte aufzubauen, sodass es als Schlüssel im IdentityHashMap „passt“ und der Identitätsvergleich wahr wird.

Kategorien: [Allgemein](https://www.tutego.de/blog/javainsel/category/allgemein/)

[← Alle Beiträge](https://www.tutego.de/blog/javainsel/)

---

## Navigation

- Previous: [Vortrag: Angelika Langer über Java 8 auf Jfokus 2012](https://www.tutego.de/blog/javainsel/2013/10/vortrag-angelika-langer-ber-java-8-auf-jfokus-2013.md)
- Next: [Präsentation von Lock-freien Algorithmen](https://www.tutego.de/blog/javainsel/2013/10/prsentation-von-lock-freien-algorithmen.md)
