IdentityHashMap:key可以重复的Map集合
key允许重复,只要两个对象的地址不相等即可。
例:
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public boolean equals(Object obj) {
// 判断地址是否相等 ,返回true表示同一对象
if (this == obj) {
return true;
}
// 传递进来的不是本类的对象 ,返回false表示不是同一对象
if (!(obj instanceof Person)) {
return false;
}
// 进行向下转型
Person p = (Person) obj;
if (this.name.equals(p.name) &&this.age == p.age) {
return true ;
}else{
return false ;
}
}
public int hashCode(){
return this.name.hashCode() * this.age ;
}
public String toString() {
return "姓名:" + this.name + ";年龄:" + this.age;
}
}
Map<Person, String> map = new IdentityHashMap<Person, String>();
map.put(new Person("A", 30), "A1");
map.put(new Person("A", 30), "A2");
map.put(new Person("B", 31), "lisi");
Set<Map.Entry<Person, String>> allSet = map.entrySet();
Iterator<Map.Entry<Person, String>> iter = allSet.iterator();
while (iter.hasNext()) {
Map.Entry<Person, String> me = iter.next();
System.out.println(me.getKey()+ " --> " + me.getValue());
}
分享到:
相关推荐
例如,如果一个应用需要多次使用相同的对象作为键,而这些对象的`equals()`方法返回true,那么使用IdentityHashMap可以避免创建多个相同内容的对象,从而节省内存。 三、IdentityHashMap的实现细节 ...
IdentityHashMap是Java中的一种特殊的哈希表实现,它使用"引用相等"(而不是"对象相等")来判断键的唯一性。具体来说,当且仅当两个键引用同一个对象时,它们被认为是相等的。
2. **非线程安全**:与大多数其他集合类一样,`IdentityHashMap`不是线程安全的。如果你需要在多线程环境中使用,需要自行添加同步机制或使用`Collections.synchronizedMap()`来创建一个线程安全的版本。 3. **无序...
例如,你可以生成一个包含不重复随机整数的集合,或者创建一个按特定概率分布的随机元素集合。 总结来说,Java集合框架提供了丰富的数据结构和算法,能够适应各种编程需求。HashMap和IdentityHashMap满足了快速存取...
`Set`接口确保集合中的元素唯一,不允许重复,并且支持数学集合操作,如交集和并集。常见的实现类有`HashSet`、`TreeSet`和`LinkedHashSet`。`List`接口则维护元素的顺序,并允许通过索引访问,常见的实现类有`...
- **集合和数组的区别**:集合只能保存对象,而数组可以保存基本类型和对象。集合提供了更灵活的数据管理方式,例如动态扩容和多样化数据结构。 - **集合的分类**:Java集合主要分为两大类,即Collection和Map。...
- **特点**:Map是一种键值对的数据结构,键(key)必须唯一,而值(value)可以重复。Map主要用于根据键来查找对应的值。 - **HashMap**:高效查找,基于哈希表,键和值都必须重写equals()和hashCode()。 - **...
如果需要确保集合中没有重复元素,则可以选择`Set`;而当需要存储键值对时,则应该使用`Map`。每种类型的集合都有其特定的优点和适用场景,理解它们之间的区别有助于编写更加高效、易于维护的代码。
- IdentityHashMap:使用“引用相等”而非“内容相等”来比较键值对,适用于特定场景。 - WeakHashMap:键是弱引用,一旦键不再被引用,即使值仍然存在,键值对也会被自动移除,依赖于垃圾回收机制。 总结起来,...
键必须是唯一的,而值则可以重复。 2. **无序性**:Map中的元素没有特定的顺序,尽管某些实现类如LinkedHashMap提供了按照插入或访问顺序维护元素的选项。 3. **键的唯一性**:键对象不能重复,如果尝试插入一个已...
Map接口则是用于存储键值对的集合,键(Key)必须是唯一的,而值(Value)可以重复。Map接口的实现类有Hashtable、HashMap、LinkedHashMap、WeakHashMap和IdentityHashMap。Hashtable与HashMap类似,但它是线程安全...
- Map 存储的是键值对,键是唯一的,而值可以重复。Map 提供了通过键来访问和操作元素的能力。 - Set 是元素的集合,每个元素都是唯一的,没有键值对的概念。 3. ArrayList 和 LinkedList 的差异: - ArrayList ...
`Map`接口不同于`Collection`,它用于存储键值对(key-value pairs),而不是单一的元素。`HashMap`是最常用的`Map`实现,提供了快速的查找和插入。`TreeMap`基于红黑树,保持键的排序;`IdentityHashMap`比较键时使用...
- **键值对**:Map是一种键值对的数据结构,它将唯一的键与对应的值关联起来,键必须唯一,但值可以重复。 - **无序性**:Map通常是无序的,但`TreeMap`和`LinkedHashMap`提供了排序或插入顺序的保证。 - **功能...
Map中的键是唯一的,值可以重复。Hashtable是线程安全的Map实现,而HashMap非线程安全但更高效。HashMap使用哈希函数快速定位键值对,而Hashtable不允许null键和值。LinkedHashMap保持插入顺序,WeakHashMap则允许弱...
本文总结了Java中级面试题,涵盖了集合、HashMap、HashSet、HashTable、ConcurrentHashMap、红黑树、Java 8对HashMap的优化、LinkedHashMap、TreeMap、IdentityHashMap等知识点。 集合 * List和Set都是继承自...
- **Set**: 不允许重复元素的集合。HashSet是最基础的实现,基于哈希表;TreeSet则保证元素排序,基于红黑树数据结构。 - **Queue**: 代表先进先出(FIFO)的数据结构,例如LinkedList也可作为队列使用,还有...
Java集合框架是Java编程...总之,Java集合框架为开发者提供了丰富多样的数据结构和操作工具,可以根据具体需求选择合适的数据结构和算法,提高代码的可读性和性能。理解和熟练使用集合框架是Java程序员必备的技能之一。
- **IdentityHashMap类**:使用系统身份哈希码确定相等性。 - **WeakHashMap类**:使用弱引用作为键的`Map`。 - **Collections类**:提供了一些静态方法来操作集合。 - **集合实现类特征图**:展示了不同集合实现...