如何在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方法加入并且不用做额外判断了
附上代码输出结果: