Entry键值对象、HahaMap存储自定义类型值
Entry键值对象
映射项(键-值对)。Map.entrySet 方法返回映射的 collection 视图,其中的元素属于此类。获得映射项引用的惟一 方法是通过此 collection 视图的迭代器来实现。这些 Map.Entry 对象仅 在迭代期间有效;更正式地说,如果在迭代器返回项之后修改了底层映射,则某些映射项的行为是不明确的,除了通过 setValue 在映射项上执行操作之外。
看方法
方法摘要 | |
---|---|
K |
getKey() 返回与此项对应的键。 |
V |
getValue() 返回与此项对应的值。 |
int |
hashCode() 返回此映射项的哈希码值。 |
V |
setValue(V value) 用指定的值替换与此项对应的值(可选操作)。 |
这些中最主要的就是 获取key 和 vlaue
我们来一次测试一下
/* Set:获取map集合中的所有的键值对 对象的集合*/
Set<java.util.Map.Entry<Integer, String>> entries = map.entrySet();
Iterator<java.util.Map.Entry<Integer, String>> iterator = entries.iterator();
while (iterator.hasNext()){
java.util.Map.Entry<Integer, String> next = iterator.next();
System.out.println(next.getKey()+"--->"+next.getValue());
}
HahaMap存储自定义类型值
HashMap存储之定义类型键值
Map集合保证Key是唯一的
做作为Key的元素,必须重写HashCoid方法和equals方法,比保证唯一
Key:String类型
String类重写hashCode必须重写HashCoid方法和equals方法,比保证唯一
value:Strdent
valuse可以重复
案例:
public class Map1 {
public static void main(String[] args) {
HashMap<String, Strudent> map = new HashMap<String, Strudent>();
map.put("河北",new Strudent("达旺",18));
map.put("吉林",new Strudent("虎牙",19));
map.put("湖北",new Strudent("哪呀",17));
map.put("湖北",new Strudent("aa",17));
// 使用entrySet遍历
Iterator<java.util.Map.Entry<String, Strudent>> iterator = map.entrySet().iterator();
while (iterator.hasNext()){
java.util.Map.Entry<String, Strudent> next = iterator.next();
System.out.println(next.getKey()+"--->"+next.getValue());
}
}
}
public class Strudent {
private String name;
private int gae;
public Strudent(String name, int gae) {
this.name = name;
this.gae = gae;
}
public Strudent() {
}
@Override
public String toString() {
return "Strudent{" +
"name='" + name + '\'' +
", gae=" + gae +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getGae() {
return gae;
}
public void setGae(int gae) {
this.gae = gae;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Strudent strudent = (Strudent) o;
return gae == strudent.gae &&
Objects.equals(name, strudent.name);
}
@Override
public int hashCode() {
return Objects.hash(name, gae);
}
}
在我们使用map集合存储自定义对象的使用 我们实体类要重写方法
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Strudent strudent = (Strudent) o;
return gae == strudent.gae &&
Objects.equals(name, strudent.name);
}
这样输出的key就不会有重复的了