JAVA 二十三 集合SET

JAVA 二十三 集合SET

标签: JAVA


hashSet

  • hashSet:底层的数据结构是 哈希表
    • hashSet通过hashcode 和 equals方法判断
    • 如果元素的hashcode值相同,判断equals方法
    • 如果元素的hashcode值不同,不会判断equals方法
import java.util.HashSet;
import java.util.TreeSet;

/*
 * Set:无序 唯一
 *  hashSet:底层的数据结构是 哈希表
 *          hashSet通过hashcode 和 equals方法判断
 *          如果元素的hashcode值相同,判断equals方法
 *          如果元素的hashcode值不同,不会判断equals方法
 * TreeSet:底层的数据结构是二叉树
 *          根据compareTo()方法保证数据的唯一性
 *          第一种方式: 让元素自身具备 比较性 实现compareable接口,重写 compareTo()方法,该方法返回值是0时认为是同一个对象
 *          第二种方式: 当元素自身不能实现compareable接口时,需要集合自身具有比较性,需要自定义类实现Comparator接口,覆盖compare方法
 * 
 */
public class HashSetDemo {
    public static void main(String[] args){

        HashSet<String> set1 = new HashSet<String>();

        set1.add("java01");
        set1.add("java02");
        set1.add("java03");
        System.out.println(set1.add("java02"));
        System.out.println(set1);

        HashSet<Student> set2 = new HashSet<Student>();
        System.out.println(set2.add(new Student("aa",20)));
        System.out.println(set2.add(new Student("cc",21)));
        System.out.println(set2.add(new Student("dd",21)));
        System.out.println(set2.add(new Student("aa",20)));
        System.out.println(set2.add(new Student("aa",20)));
        System.out.println(set2);

        TreeSet<YuanG> set3 = new TreeSet<YuanG>(new MyComparator());
        set3.add(new YuanG("AA",18));
        set3.add(new YuanG("BB",25));
        set3.add(new YuanG("BB",25));
        set3.add(new YuanG("CC",55));
        set3.add(new YuanG("boss",22));
        set3.add(new YuanG("boss",22));
        System.out.println(set3);

        TreeSet<Student> set4 = new TreeSet<Student>();
        set4.add(new Student("aa",1111));
        set4.add(new Student("bb",1111));
        set4.add(new Student("cc",1111));
        set4.add(new Student("aa",1111));
        System.out.println(set4);
    }
}

TreeSet

  • TreeSet:底层的数据结构是二叉树
    • 根据compareTo()方法保证数据的唯一性
    • 第一种方式: 让元素自身具备 比较性 实现compareable接口,重写 compareTo()方法,该方法返回值是0时认为是同一个对象
    • 第二种方式: 当元素自身不能实现compareable接口时,需要集合自身具有比较性,需要自定义类实现Comparator接口,覆盖compare方法

student类

public class Student implements Comparable<Student>{
    private String name;
    private int age;
    public Student(String name,int age){
        this.setName(name);
        this.setAge(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;
    }
    public String toString(){
        return this.name+"|"+this.age;
    }
    @Override
    public boolean equals(Object obj) {
        // TODO Auto-generated method stub
//      if(obj instanceof Student){
//          Student stu=(Student)obj;
//          return this.name.equals(stu.name) && this.age==stu.age;
//      }else{
//          return false;
//      }
        return false;
    }
    public int hashCode(){
        return age+name.hashCode();
    }
    @Override
    public int compareTo(Student o) {
        // TODO Auto-generated method stub
        if(name.compareTo(o.name)==0){
            return age-o.age;
        }else{
            return name.compareTo(o.name);
        }
    }
}

YuanG类

public class YuanG {
    private String name;
    private int age;
    public YuanG(String name,int age){
        this.name=name;
        this.age=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;
    }
    public String toString(){
        return "名字"+name+"|年龄"+age+"";
    }
}

MyComparator类

import java.util.Comparator;

public class MyComparator implements Comparator<YuanG>{

    @Override
    public int compare(YuanG o1, YuanG o2) {
        // TODO Auto-generated method stub
        if(o1.getAge()==o2.getAge()){
            return o1.getName().compareTo(o2.getName());
        }else{
            return o1.getAge()-o2.getAge();
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值