如何在set里去重重复对象

源于简单的问题:创建一个新类Car(2个属性,名字name和价格price),如何往车集合car_set(类型为HashSet<Car>)里面添加新对象且不重复。

代码如下:

import java.util.HashSet;
import java.util.Objects;
import java.util.Set;

public class CarPractice {

    public static void main(String[] args){
        Set<Car> car_set = new HashSet<>();
        car_set.add(new Car("宝马",1));
        car_set.add(new Car("奔驰",2));
        car_set.add(new Car("宝马",1));
        System.out.println(car_set);
    }
}

class Car{
    public String name;
    public double price;
    Car(String name, double price){
        this.name = name;
        this.price = price;
    }

    @Override
    public String toString() {
        return "Car{" +
                "name='" + name + '\'' +
                ", price=" + price +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Car car = (Car) o;
        return Double.compare(price, car.price) == 0 && Objects.equals(name, car.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, price);
    }
}

重点看@Override注解,这个是IDEA里自带的(Alt+Insert)可以直接选:

,其中toString方法是当你需要sout这个对象的时候输出的字符串,而hashCodeequals则是用来判断是否重复的重要方法,hashCodeequals会同时被创建,在创建的时候你可以选择哪些字段相同才算相同(例如name和price都相同才算相同),这样就可以直接调用set的add方法加入并且不用做额外判断了

附上代码输出结果

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
1
分享
牛客网
牛客企业服务