Set集合

1.Set集合

Set集合也是用来存储数据的

Set也是一个接口

父接口是Collection

存储数据的特征:   无序的  不可重复的

Set接口有两个实现类:

    HashSet:

            依靠hash值进行存储的,如果两个元素hash值一样的话,就不再存储了

    TreeSet:

            底层是二叉树,对存储数据进行自然排序

 2.HashSet

和ArrayList很像

HashSet存对象【重点】

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

class People{
    String name;
    int age;

    public People(String name, int age) {
        this.name = name;
        this.age = age;
    }

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

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

    @Override
    public String toString() {
        return "People{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
public class Demo03 {
    public static void main(String[] args) {
        People people = new People("dmh",22);
        People people1 = new People("lxz",22);
        Set<People> set = new HashSet<>();
        //在调用add方法的时候 底层在调用hashCode方法和equals
        set.add(people);
        set.add(people1);
        System.out.println(set);

    }
}

3.TreeSet 

和ArrayList很像

TreeSet存对象【重点】

如果想要在TreeSet集合中添加对象的话

要去实现Comparable这个接口

抽象方法:

int     compareTo(T o)   将此对象与指定的对象进行比较以进行排序.
 

 

将此对象与指定的对象进行比较以进行排序。 返回一个负整数,零或正整数,因为该对象小于,等于或大于指定对象。

stu1.comparetTo(stu2) 

得有一个int类数据

好好思考一个问题:你得给我返回一个int类型的数据

    stu1有age变量    stu1的年龄 减去 stu2的年领

如果年龄返回值是一个负数的话: stu1的年领小与 stu 2

如果年龄返回值是一个0的话,stu1的年龄和stu2年龄相等

如果年龄返回值是一个正整数的话: stu1的年领大于 stu 2

 

set.add(stu1);  第一次调用compareTo
stu1和stu1在比较   45-45 =0   只保留 stu1

set.add(stu2)的时候
又调用compareTo() 第二次调用compareTo
o:stu1
this: stu2  35 - 45  = -10 负数  stu2 比stu1小  咋排  [stu2,  stu1]

set.add(stu3)的时候  第三次调用compareTo
this:  stu3
o: stu1
    [stu3, stu1]

        第四次调用compareTo
        this:stu3
        o:stu2  [stu3  stu2]
        [stu3 stu2 stu1]

import java.util.Set;
import java.util.TreeSet;

class Test implements Comparable<Test>{
    String name;
    int age;

    public Test(String name, int age) {
        this.name = name;
        this.age = age;
    }
    @Override
    public String toString() {
        return "Test{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    @Override
    public int compareTo(Test o) {
        int num = this.age-o.age;
        return num;
    }
}
public class Demo04 {
    public static void main(String[] args) {
        Test test1 = new Test("demo",22);
        Test test2 = new Test("test",20);
        Set<Test> set = new TreeSet<>();
        set.add(test1);
        set.add(test2);
        System.out.println(set);
    }
}

 4.总结

1.HashSet存对象的时候,一定在类中重写equals和hashCode方法
2.TreeSet存对象的时候,一定要实现一个接口Comparable,重写compareTo方法
比较两个对象某个属性的int类型差值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值