此类不是 通用 Map 实现!此类实现 Map 接口时,它有意违反 Map 的常规协定,该协定在比较对象时强制使用 equals 方法。此类设计仅用于其中需要引用相等性语义的罕见情况。
例如:
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){
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 false
}
}
public int hashCode(){
return this.name.hashCode() * this.age
}
public String toString(){
return "姓名:" + this.name + ",年龄:" + this.age
}
}
HashMap情况:
public class IdentityHashMapDemo01{
public static void main(String args[]){
Map<Person,String>map = null // 声明Map对象
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()
Iterator<Map.Entry<Person,String>>iter = null
iter = allSet.iterator()
while(iter.hasNext()){
Map.Entry<Person,String>me = iter.next()
System.out.println(me.getKey() + " -->" + me.getValue())
}
}
}
结果:相同的key内容,value会被覆盖
姓名:李四,年龄:31 -->lisi
姓名:张三,年龄:30 -->zhangsan_2
IdentityHashMap情况
public class IdentityHashMapDemo02{
public static void main(String args[]){
Map<Person,String>map = null // 声明Map对象
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()
Iterator<Map.Entry<Person,String>>iter = null
iter = allSet.iterator()
while(iter.hasNext()){
Map.Entry<Person,String>me = iter.next()
System.out.println(me.getKey() + " -->" + me.getValue())
}
}
}
结果:相同的key内容(由于是new出来的,内存地址不同但内容相同),但value不会被覆盖
姓名:张三,年龄:30 -->zhangsan_2
姓名:张三,年龄:30 -->zhangsan_1
姓名:李四,年龄:31 -->lisi v>
不知道你具体是什么问题,希望这段代码能帮到你:Hashtable ht = new Hashtable()
Hashtable ht2 = new Hashtable()
ht.Add("Victor", 2000)
ht.Add("Bill", 3000)
ht2.Add("Bill", 1500)
ht2.Add("Michael", 4000)
foreach (string key in ht.Keys)
{
if (ht2.ContainsKey(key))
{
if (ht[key] == ht2[key]) //用这种方法 利用key来从hashtable中取值
{
Console.WriteLine("Key is:{0}, value is {1},equel", key, ht[key])
}
else
{
Console.WriteLine("Key is:{0}, not equel", key)
}
break
}
}
javamap的用法如下;
1、void clear():删除Map中所有键值对。
2、boolean containsKey(Object key):查询Map中是否包含指定key,如果包含则返回true。
3、boolean containsValue(Object value):查询Map中是否包含指定value,如果包含则返回true。
4、Set entrySet():返回Map中所包含的键值对所组成的Set集合,每个集合元素都是Map.Entry对象(Entry是Map的内部类)。
5、Object get(Object key):返回指定key所对应的value,如Map中不包含key则返回null。
6、boolean isEmpty():查询Map是否为空,如果空则返回true。
7、Set keySet():返回该Map中所有key所组成的set集合。
8、Object put(Object key,Object value):添加一个键值对,如果已有一个相同的key值则新的键值对覆盖旧的键值对。
9、void putAll(Map m):将指定Map中的键值对复制到Map中。
10、Object remove(Object key):删除指定key所对应的键值对,返回可以所关联的value,如果key不存在,返回null。
11、int size():返回该Map里的键值对的个数。
12、Collection values():返回该Map里所有value组成的Collection。
Map中包含一个内部类:Entry。该类封装了一个键值对,它包含了三个方法:
1、Object getKey():返回该Entry里包含的key值。
2、Object getValeu():返回该Entry里包含的value值。
3、Object setValue(V value):设置该Entry里包含的value值,并返回新设置的value值。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)