【课堂笔记】set

1 TreeSet

1.1基础知识
  • A自然排序B自定义排序
  • comparaTo自定义顺序,-1逆序,1顺序, ```
  • 自定义排序列表:
public int compareTo(User u) {
    //主要条件:按年龄排序
    int num = this. age - u.age;
   //次要条件:年龄相同,还看姓名是否相同
    int num2 = num == 0 ? this.name.compareTo(u.name) : num;
    return num2;
} ```
1.1 TreeSet基础代码
   TreeSet<Integer> ts = new TreeSet<>();
        ts.add(20);
        ts.add(19);
        ts.add(18);
        ts.add(17);
        ts.add(16);
        ts.add(15);
        ts.add(14);
        ts.add(13);
        for (Integer i : ts) {
            System.out.println(i);
        }

1.1 TreeSet基础代码测试结果:
请添加图片描述

1.2 TreeSet自定义排序
main

      TreeSet<User> set = new TreeSet<>();
        User u1 = new User("a123", 20);
        User u2 = new User("b456", 21);
        User u3 = new User("c789", 22);
        User u4 = new User("e789", 22);
        User u5 = new User("g789", 22);
        User u6 = new User("m789", 22);
        User u7 = new User("p789", 22);
        set.add(u1);
        set.add(u2);
        set.add(u3);
        set.add(u4);
        set.add(u5);
        set.add(u6);
        set.add(u7);
        for (User u :set){
            System.out.println(u);
        }    
User.java

public class User implements Comparable<User>{
    private String name;
    private int age;

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

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

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof User)) return false;
        User user = (User) o;
        return getAge() == user.getAge() && Objects.equals(getName(), user.getName());
    }

    @Override
    public int hashCode() {
        return Objects.hash(getName(), getAge());
    }


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public int compareTo(User o) {
        return -1;
    }
}

1.2 TreeSet自定义排序测试结果:
请添加图片描述

1.3 自然排序主次要案例demo
       main

        TreeSet<User> set = new TreeSet<>();
        User u1 = new User("kebi", 20);
        User u2 = new User("baoluo", 21);
        User u3 = new User("hellun", 22);
        User u4 = new User("rose", 22);
        User u5 = new User("juhua", 22);
        User u6 = new User("lihua", 22);
        User u7 = new User("hiehie", 22);
        set.add(u1);
        set.add(u2);
        set.add(u3);
        set.add(u4);
        set.add(u5);
        set.add(u6);
        set.add(u7);
        for (User u :set){
            System.out.println(u);
        }

       
User.java

public class User implements Comparable<User>{
    private String name;
    private int age;

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

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
               ![请添加图片描述](https://img-blog.csdnimg.cn/1e6b6f984e3440beb3ebde23a7a5bd00.png)
 '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof User)) return false;
        User user = (User) o;
        return getAge() == user.getAge() && Objects.equals(getName(), user.getName());
    }

    @Override
    public int hashCode() {
        return Objects.hash(getName(), getAge());
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public int compareTo(User u) {
        //主要条件: 名字长度排序
        int num = this.name.length() - u.name.length();
        //次要条件: 名字长度相同,按不同内容排序
        int num2 = num == 0 ? this.name.compareTo(u.name) : num;
        //次要条件:内容名字相同,年龄排序
        int num3 = num2 == 0 ? this.age - u.age : num2;
        return  num3;
    }
}

1.3 HashSet基础代码测试结果:

1.4 HashSet基础代码
       
       

1.4 HashSet基础代码测试结果:

1.5HashSet基础代码
       
       

1.5 HashSet基础代码测试结果:





2 HashSet

2.1 HashSet基础代码
User.java
public class User {
    private String name;
    private int age;

    public User(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;
        User user = (User) o;
        return age == user.age && Objects.equals(name, user.name);
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

}
        Set<User> set = new HashSet<>();
        User u1 = new User("123", 20);
        User u2 = new User("456", 21);
        User u3 = new User("789", 22);
        set.add(u1);
        set.add(u2);
        set.add(u3);
        for (User u :set){
            System.out.println(u);
        }

2.1 HashSet基础代码测试结果:

请添加图片描述

2.2 HashSet基础代码
       
       

2.2 HashSet基础代码测试结果:

2.3 HashSet基础代码
       
       

2.3 HashSet基础代码测试结果:

2.4 HashSet基础代码
       
       

2.4 HashSet基础代码测试结果:





3 LinkHashSet

  • 底层数据结构是由哈希表和链表组成
  • 存储和取出一致
3.1 LinkHashSet基础代码
        LinkedHashSet<String> ls = new LinkedHashSet<>();
        ls.add("hello0");
        ls.add("hello0");
        ls.add("java");
        ls.add("world");
        ls.add("god");
        ls.add("it");
        Iterator<String> it = ls.iterator();
        while(it.hasNext()){
            String s = it.next();
            System.out.println(s);
        }

3.1 LinkHashSet基础代码测试结果:
在这里插入图片描述

3.2 LinkHashSet基础代码
       
       

3.2 LinkHashSet基础代码测试结果:

3.3 HashSet基础代码
       
       

3.3 HashSet基础代码测试结果:

3.4 HashSet基础代码
       
       

3.4 HashSet基础代码测试结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值