JDK之AbstractMap源码解读(二)
目录 keySet()values()equals(Object o)hashCode()toString()eq(Object o1, Object o2)静态内部类keySet()作用:返回当前Map中所有key组成的set。values()作用:返回当前Map中所有value组成的Collection。equals(Obje...
文章共978字 · 阅读需要大约4分钟
一键AI生成摘要,助你高效阅读
问答
·
目录
keySet()
作用:返回当前Map中所有key组成的set。
values()
作用:返回当前Map中所有value组成的Collection。
equals(Object o)
作用:判断当前Map和Object o 是否相等。
hashCode()
作用:计算Map的hash值。
toString()
作用:返回Map对应的String。
eq(Object o1, Object o2)
作用:simpleEntry和simpleImmutableEntry的实用方法,测试是否相等,检查是否为空值。
静态内部类
public static class SimpleEntry<K,V> implements Entry<K,V>, java.io.Serializable
一种保存key和value的entry 。可以使用setValue方法更改该value。
public static class SimpleEntry<K,V>
implements Entry<K,V>, java.io.Serializable
{
private static final long serialVersionUID = -8499721149061103585L;
//key有final修饰,是无法修改的
private final K key;
private V value;
//用key和value初始化
public SimpleEntry(K key, V value) {
this.key = key;
this.value = value;
}
//用entry来初始化
public SimpleEntry(Entry<? extends K, ? extends V> entry) {
this.key = entry.getKey();
this.value = entry.getValue();
}
//获取key
public K getKey() {
return key;
}
//获取value
public V getValue() {
return value;
}
//设置value,并返回旧的value
public V setValue(V value) {
V oldValue = this.value;
this.value = value;
return oldValue;
}
//比较当前entry和o是否相等
public boolean equals(Object o) {
//o必须是Entry类型,否则返回false
if (!(o instanceof Map.Entry))
return false;
//将o强转成Entry类型
Map.Entry<?,?> e = (Map.Entry<?,?>)o;
//比较当前entry和o的key和value是否都相等
return eq(key, e.getKey()) && eq(value, e.getValue());
}
//计算当前entry的hash值
public int hashCode() {
//将entry的key的hash值与value的hash值进行异或运算
return (key == null ? 0 : key.hashCode()) ^
(value == null ? 0 : value.hashCode());
}
//返回entry对应的String
public String toString() {
return key + "=" + value;
}
}
public static class SimpleImmutableEntry<K,V> implements Entry<K,V>, java.io.Serializable
一种保存key和value的不可变entry 。
public static class SimpleImmutableEntry<K,V>
implements Entry<K,V>, java.io.Serializable
{
private static final long serialVersionUID = 7138329143949025153L;
//key和value都是不可变的
private final K key;
private final V value;
//用key、value初始化
public SimpleImmutableEntry(K key, V value) {
this.key = key;
this.value = value;
}
//用entry初始化
public SimpleImmutableEntry(Entry<? extends K, ? extends V> entry) {
this.key = entry.getKey();
this.value = entry.getValue();
}
//获取key
public K getKey() {
return key;
}
//获取value
public V getValue() {
return value;
}
//不支持该操作,抛出异常
public V setValue(V value) {
throw new UnsupportedOperationException();
}
//比较当前entry和o是否相等
public boolean equals(Object o) {
//如果o不是Entry类型,返回false
if (!(o instanceof Map.Entry))
return false;
//将o转成Entry,比较当前entry对应的key和value与它是否相等
Map.Entry<?,?> e = (Map.Entry<?,?>)o;
return eq(key, e.getKey()) && eq(value, e.getValue());
}
//计算当前entry的hash值
public int hashCode() {
//将entry的key和value的hash值进行异或运算
return (key == null ? 0 : key.hashCode()) ^
(value == null ? 0 : value.hashCode());
}
//获取当前entry对应的String
public String toString() {
return key + "=" + value;
}
}
更多推荐
已为社区贡献3条内容
所有评论(0)