海阔天空

当前时间为:
欢迎大家来到海阔天空https://www.9713job.com,广告合作以及淘宝商家推广请微信联系15357240395

2020java教程:集合框架之Set集合

未分类
2020-08-24 13:35:17
1822677238@qq.com

手机扫码查看

2020java教程:集合框架之Set集合

集合框架之Set集合

Set子接口
特点:无序、无下标,元素不可重复
方法:全部继承自Collection中的方法

Set实现类
HashSet
基于Hashcode实现元素不重复
当存入元素的哈希码相同时,会调用equals进行确认,如结果为true,则拒绝后者存入

import java.util.HashSet;
import java.util.Objects;

public class demos{
    public static void main(String[] args) {
        Student s1=new Student("tom",22,"男",99D);
        Student s2=new Student("jack",23,"女",78.5);
        Student s3=new Student("home",44,"男",46.5);
        Student s4=new Student("home",44,"男",46.5);
        HashSet<Student> set=new HashSet<Student>();
        set.add(s1);
        set.add(s2);
        set.add(s3);
        set.add(s4);
        for(Student s:set){
            System.out.println(s);
        }
    }
}
class Student{
    String name;
    Integer age;
    String sex;
    Double score;
    public Student(String name, Integer age, String sex, Double score) {
        this.name = name;
        this.age = age;
        this.sex = sex;
        this.score = score;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return Objects.equals(name, student.name) &&
                Objects.equals(age, student.age) &&
                Objects.equals(sex, student.sex) &&
                Objects.equals(score, student.score);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age, sex, score);
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                ", score=" + score +
                '}';
    }
}

LinkedHashSet:
链表实现的HashSet,按照链表进行存储,即可以保留元素的插入顺序

TreeSet:
基于排列顺序实现元素不重复
实现了SortedSet接口,对集合元素自动排序
元素对象的类型必须实现Comparable接口,指定排序规则
通过ComparaTo方法确定是否为重复元素

import java.util.*;

public class demos{
    public static void main(String[] args) {
        TreeSet<Teacher> list= new TreeSet<Teacher>();
        list.add(new Teacher("tom",22,"男",5000D));
        list.add(new Teacher("tom2",24,"男",5000D));
        list.add(new Teacher("tom3",23,"女",5000D));
        list.add(new Teacher("tom",22,"男",5000D));
        for(Teacher t:list){
            System.out.println(t);
        }
    }
}
class Teacher implements Comparable<Teacher>{
    String name;
    Integer age;
    String sex;
    Double salary;
    public Teacher(String name, Integer age, String sex, Double salary) {
        this.name = name;
        this.age = age;
        this.sex = sex;
        this.salary = salary;
    }
    @Override
    public String toString() {
        return "Teacher{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                ", salary=" + salary +
                '}';
    }
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Teacher teacher = (Teacher) o;
        return Objects.equals(name, teacher.name) &&
                Objects.equals(age, teacher.age) &&
                Objects.equals(sex, teacher.sex) &&
                Objects.equals(salary, teacher.salary);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age, sex, salary);
    }
    @Override
    public int compareTo(Teacher o) {
        if(this.salary>o.salary){
            return 1;
        }else if(this.salary<o.salary){
            return -1;
        }else{
            if(this.age>o.age){
                return 1;
            }else if(this.age<o.age){
                return -1;
            }else{
                if(this.name.compareTo(o.name)<0){
                    return -1;
                }else if(this.name.compareTo(o.name)>0){
                    return 1;
                }else{
                    return this.sex.compareTo(o.sex);
                }
            }
        }
    }
}

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注