C/C++教程

第一次考试出错题equals和hashcode

本文主要是介绍第一次考试出错题equals和hashcode,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
// An highlighted block

//商品类
public class Product {
    //店铺名称
    private String store;
    //商品名称
    private String name;

    public Product(String store, String name) {
        this.store = store;
        this.name = name;
    }
    public String getStore() {
        return store;
    }
    public void setStore(String store) {
        this.store = store;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Product product = (Product) o;
        return Objects.equals(store, product.store) &&
                Objects.equals(name, product.name);
    }
    @Override
    public int hashCode() {
        return Objects.hash(store, name);
    }
    @Override
    public String toString() {
        return "Product{" +
                "store='" + store + '\'' +
                ", name='" + name + '\'' +
                '}';
    }
}

//测试类
 public class Test {
    public static void main(String[] args) {
        //1.创建Scanner对象
        Scanner sc = new Scanner(System.in);
        //2.创建Map集合对象
        HashMap<Product, Integer> hashMap = new HashMap<>();
        //3.循环将商品加入购物车
        while (true) {
            System.out.println("请你输入要添加商品的店铺:");
            String store = sc.next();
            if (store.equals("end")) {
                break;
            }else{
                System.out.println("请你要输入添加的商品名称:");
                String name = sc.next();
                //4.根据输入的店铺名称和商品名称,封装成Product对象
                Product product = new Product(store, name);
                if (!hashMap.containsKey(product)) {
        //5.如果集合中不包含我们添加的同一个店铺同一个商品的话,直接往集合中添加该商品
                    hashMap.put(product, 1);
                    look(hashMap);
                } else {
                    //6.否则将该商品对应的值(数量)从集合中获取出来,让其加1
                    Integer number = hashMap.get(product);
                    number++;
                    //7.将加1之后的商品重新添加到集合中
                    hashMap.put(product, number);
                    look(hashMap);
                }
            }
        }
    }
    public static void look(HashMap<Product, Integer> hashMap) {
        //8.遍历集合
        Set<Map.Entry<Product, Integer>> entrySet = hashMap.entrySet();
        for (Map.Entry<Product, Integer> entry : entrySet) {
            Product key = entry.getKey();
            Integer value = entry.getValue();
            System.out.println(key+"-->"+value);
        }
    }
}

# 重写equals和hashcode equals判断对象是否同一个类型,hashcode判断对象的内容是否一样,如果完全一样就是true。 如果不重写的话,每个new对象都不一样,商品永远都不重复。 hashcode的意思就是求对象的 hash函数放入对象,对象的hash值基本不一样。如果内容一样hash值一样

![在这里插入图片描述](https://www.www.zyiz.net/i/ll/?i=20210510171526691.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2MDQwMjgy,size_16,color_FFFFFF,t_70)
![在这里插入图片描述](https://www.www.zyiz.net/i/ll/?i=20210510172412138.png)

这篇关于第一次考试出错题equals和hashcode的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!