Java 基础学习之类集框架 九 (key 可以重复的 Map 集合:IdentityHashMap)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java 基础学习之类集框架 九 (key 可以重复的 Map 集合:IdentityHashMap),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4149字,纯文字阅读大概需要6分钟。
内容图文
![Java 基础学习之类集框架 九 (key 可以重复的 Map 集合:IdentityHashMap)](/upload/InfoBanner/zyjiaocheng/727/9e61bed019c34a0094018c348166bcbc.jpg)
1. Map 中的 key 不允许重复,重复就是覆盖
?? 之前讲解的所有 Map 操作中 key 的值是不能重复的,例如,HashMap 操作的时候是不能重复的,如果重复肯定会覆盖之前的内容。
实例 1 代码:
package self.learn.setdemo;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class Person{ // 定义 Person 类实现比较器
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public boolean equals(Object obj) { // 覆写 equals() 方法
if(this == obj) { // 地址相等
return true; // 是同一对象
}
if(!(obj instanceof Person)) { // 传递进来的不是本类对象
return false; // 不是同一对象
}
Person p = (Person)obj; // 进行向下转型
if(this.name.equals(p.name)&&this.age == p.age) { // 属性依次比较
return true; // 全部属性相等,是同一对象
}else {
return true; // 属性不相等,不是同一对象
}
}
public int hashCode() { // 覆写 hashCode() 方法
return this.name.hashCode()*this.age; // 指定编码公式
}
@Override
public String toString() { // 覆写 toString() 方法
return "Person [name=" + name + ", age=" + age + "]";
}
public static void main(String args[]) {
Map<Person, String> map = null;
map = new HashMap<Person, String>();
map.put(new Person("张三", 30),"Zhangsan_1" );
map.put(new Person("张三", 30),"Zhangsan_2" );
map.put(new Person("李四", 31),"lisi");
Set<Map.Entry<Person, String>> allSet = null; // 声明一个 Set 集合
allSet = map.entrySet(); // 将 Map 接口实例变为 Set 接口实例
Iterator<Map.Entry<Person, String>> iter = null; // 声明 Iterator 实例
iter = allSet.iterator(); // 实例化 Iterator 对象
while(iter.hasNext()) {
Map.Entry<Person, String> me = iter.next(); // 每个对象都是 Map.Entry 实例
System.out.println(me.getKey()+"--->"+me.getValue());
}
}
}
运行结果截图:
?? 从程序的运行结果中可以发现,第 2 个内容覆盖了第 1 个内容,所以此时可以使用 IdentityHashMap,使用此类时只要地址不相等(key != key2),就表示不是重复的内容,可以将相同的 key 添加集合中。
实例 2 代码:使用 IdentityHashMap 修改程序
package self.learn.setdemo;
import java.util.IdentityHashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class Person{ // 定义 Person 类实现比较器
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public boolean equals(Object obj) { // 覆写 equals() 方法
if(this == obj) { // 地址相等
return true; // 是同一对象
}
if(!(obj instanceof Person)) { // 传递进来的不是本类对象
return false; // 不是同一对象
}
Person p = (Person)obj; // 进行向下转型
if(this.name.equals(p.name)&&this.age == p.age) { // 属性依次比较
return true; // 全部属性相等,是同一对象
}else {
return true; // 属性不相等,不是同一对象
}
}
public int hashCode() { // 覆写 hashCode() 方法
return this.name.hashCode()*this.age; // 指定编码公式
}
@Override
public String toString() { // 覆写 toString() 方法
return "Person [name=" + name + ", age=" + age + "]";
}
public static void main(String args[]) {
Map<Person, String> map = null;
map = new IdentityHashMap<Person, String>();
map.put(new Person("张三", 30),"Zhangsan_1" );
map.put(new Person("张三", 30),"Zhangsan_2" );
map.put(new Person("李四", 31),"lisi");
Set<Map.Entry<Person, String>> allSet = null; // 声明一个 Set 集合
allSet = map.entrySet(); // 将 Map 接口实例变为 Set 接口实例
Iterator<Map.Entry<Person, String>> iter = null; // 声明 Iterator 实例
iter = allSet.iterator(); // 实例化 Iterator 对象
while(iter.hasNext()) {
Map.Entry<Person, String> me = iter.next(); // 每个对象都是 Map.Entry 实例
System.out.println(me.getKey()+"--->"+me.getValue());
}
}
}
运行结果截图:
?? 从程序运行结果中可以发现,现在的 key 允许重复,只要两个对象的地址不等即可。
内容总结
以上是互联网集市为您收集整理的Java 基础学习之类集框架 九 (key 可以重复的 Map 集合:IdentityHashMap)全部内容,希望文章能够帮你解决Java 基础学习之类集框架 九 (key 可以重复的 Map 集合:IdentityHashMap)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。