本文共 2012 字,大约阅读时间需要 6 分钟。
Set接口是Collection接口的子接口,但是与Collection和List接口不同的是,Set接口中不能加入重复的元素。Set接口的定义如下:
public interface Setextends Collection
HashSet
、TreeSet
、LinkedHashSet
等。这些实现类的共同点就是每个相同的项只能保存一份。HashSet采用复杂的散列存储方式存储元素,所以元素没有顺序。使用HashSet能够最快地获取集合中的元素,效率非常高。HashSet可根据 hashCode和 equals 的值判断两个对象是否是同一个对象,如果 hashCode 相等,并且 equals 返回 true,则这两个对象是同一个对象。
import java.util.HashSet;public class Main { public static void main(String[] args) { HashSetstudents = new HashSet (); students.add(new Student("张", "三")); students.add(new Student("李", "四")); students.add(new Student("王", "五")); students.add(new Student("赵", "六")); students.add(new Student("张", "四")); students.add(new Student("王", "六")); students.add(new Student("赵", "七")); students.add(new Student("张", "三")); students.add(new Student("李", "四")); students.add(new Student("赵", "八")); System.out.println(students); }}public class Student { private String first; private String last; public Student(String first, String last) { this.first = first; this.last = last; } @Override public boolean equals(Object o) { if (this == o) return true; if (o.getClass() == Student.class){ Student student = (Student) o; return student.last.equals(last); } return false; } @Override public int hashCode() { return last.hashCode(); } @Override public String toString() { return "Student{" + "first='" + first + '\'' + ", last='" + last + '\'' + '}'; }}
运行结果:
注意:上述程序中如果没有hashCode()方法,则输出结果会不同。HashSet根据hashCode和equals的值判断两个对象是否是同一个对象,如果不重载hashCode()方法,则默认情况下不同对象的 hashcode 很可能是不一样的。
转载地址:http://obqzi.baihongyu.com/