package com.dh.learn.collection; import java.util.HashSet; import java.util.Set; public class LearnHashSet { public static void main(String[] args) { Set<Person> set = new HashSet<>(); set.add(new Person("dh", 12)); set.add(new Person("dh", 12)); set.add(new Person("dh2", 12)); set.add(new Person("dh3", 12)); // set中有四个元素,乱序,与插入顺序无关。 // 因为Person没有重写hashCode方法,所以会有两个dh-12的Person,因为他们的内存地址不同。 // HashSet内部其实是用HashMap的key来实现的。 for (Person person : set) { System.out.println(person); } // 重写hashcode方法之后,Set就可以判断BMW-10.0 是同一个元素啦 Set<Car> cars = new HashSet<>(); cars.add(new Car("BMW", 10.0f)); cars.add(new Car("BMW", 10.0f)); cars.add(new Car("BYD", 9.0f)); cars.add(new Car("ASLS", 11.0f)); for (Car car : cars) { System.out.println(car); } //TreeSet会按照元素顺序排序。是用TreeMap的key实现的。 } static class Person { String name; int age; public Person(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return name + "===" + age; } @Override public boolean equals(Object obj) { return this.toString().equals(obj.toString()); } } static class Car { String name; float price; public Car(String name, float price) { this.name = name; this.price = price; } @Override public String toString() { return name + "===" + price; } @Override public boolean equals(Object obj) { return this.toString().equals(obj.toString()); } @Override public int hashCode() { return name.hashCode(); } } }