Java Set接口
Posted ʚVVcatɞ
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java Set接口相关的知识,希望对你有一定的参考价值。
Set接口是Collection接口的子接口,但是与Collection和List接口不同的是,Set接口中不能加入重复的元素。Set接口的定义如下:
public interface Set<E> extends Collection<E>
- 从定义上看,Set接口与List接口的定义并没有太大区别。但是Set接口的主要方法与Collection是一致的,Set接口并没有对Collection接口进行扩充,只是比Collection接口的要求更严格,不能增加重复元素。
- Set接口的实例无法像List接口那样可以进行双向输出,因为接口没有提供List接口中定义的get(int index)方法。
- Set接口的实现类主要有:
HashSet
、TreeSet
、LinkedHashSet
等。这些实现类的共同点就是每个相同的项只能保存一份。
HashSet采用复杂的散列存储方式存储元素,所以元素没有顺序。使用HashSet能够最快地获取集合中的元素,效率非常高。HashSet可根据 hashCode和 equals 的值判断两个对象是否是同一个对象,如果 hashCode 相等,并且 equals 返回 true,则这两个对象是同一个对象。
import java.util.HashSet;
public class Main {
public static void main(String[] args) {
HashSet<Student> students = new HashSet<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("李", "四"));
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 很可能是不一样的。
以上是关于Java Set接口的主要内容,如果未能解决你的问题,请参考以下文章
Java集合框架 Set接口实现类--TreeSet补充: Comparator接口