如何在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这个对象的时候输出的字符串,而hashCode和equals则是用来判断是否重复的重要方法,hashCode和equals会同时被创建,在创建的时候你可以选择哪些字段相同才算相同(例如name和price都相同才算相同),这样就可以直接调用set的add方法加入并且不用做额外判断了
附上代码输出结果:


