终极HashSet HashMap TreeSet TreeMap深入分析上

首先讲解HashSet

Set<String> set = new HashSet<>();
        set.add("e");
        set.add("a");
        set.add("b");
        System.out.println(set); //如果穿的是int String 就会自增

Set<User> set1 = new HashSet<>();
        set1.add(new User(21,"张三"));
        set1.add(new User(22,"里斯"));
        set1.add(new User(23,"zhangsan")); //
        set1.add(new User(23,"zhangsan")); //不想存入相同  重写equals hashcode

下面附上重写的代码

User类

class User{
    private int age;
    private String name;

    public String getName() {
        return name;
    }

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

    

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

    public int getAge() {
        return age;
    }

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

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

}

    @Override
    public int hashCode() {
        System.out.println("我是hashcode");
        return  this.name.hashCode();
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        User other = (User) obj;
        if (age != other.age)
            return false;
        if (name == null) {
            if (other.name != null)
                return false;
        } else if (!name.equals(other.name))
            return false;
        return true;
    }

下面介绍TreeSet

Set<String> set = new TreeSet<>();
        set.add("a");
        set.add("c");
        set.add("e");
        set.add("d");
        System.out.println(set);///如果穿的是基本类型(int,string) 自增
        Set<User2> set2 = new TreeSet<>(new myCom2());   //此时User2跟User1一样 只不过不是公共类一个包中只能有一个
        set2.add(new User2(21,"张三"));
        set2.add(new User2(22,"张三2"));
        set2.add(new User2(23,"张三3"));  //TreeSet不想存放对象2种方式 1、实现comparable接口2、编写一个类继承comparator
        set2.add(new User2(23,"张三3"));  //TreeSet不想存放对象2种方式
        System.out.println(set2);

第二种:

class myCom2 implements Comparator<User2>{

    @Override
    public int compare(User2 o1, User2 o2) {
        // TODO Auto-generated method stub
        return o1.getAge() - o2.getAge();
    }
    
}

第一种:   implements Comparable<User2>

 @Override
    public int compareTo(User2 o) {
        // TODO Auto-generated method stub
        if(this.age > o.age) {
            return 1;
        }else if(this.age < o.age) {
            return -1;
        }
        return 0;
    }

下篇介绍map中的方法

猜你喜欢

转载自blog.csdn.net/qq_32736999/article/details/81748378