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就不会有重复的了

 

posted @ 2022-07-08 09:24  一位程序袁  阅读(42)  评论(0编辑  收藏  举报