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接口的实现类主要有:HashSetTreeSetLinkedHashSet等。这些实现类的共同点就是每个相同的项只能保存一份。

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集合概述 & Set接口使用

Java集合框架 Set接口实现类--TreeSet补充: Comparator接口

JAVA集合

[转]JAVA集合

Java集合框架 Set接口实现类--TreeSet概述及使用

片段内容未出现在手机上