JAVA 集合接口 Set(四)

JAVA 集合接口 Set(四),第1张

JAVA 集合接口 Set(四) 1、结构

Collection 接口 :单列集合,用来存储一个一个的对象===Set 接口:存储无序不可重复的数据。======HashSet:作为Set 接口的主要实现类,线程不安全,可存储null 数据。=========LikedHashSet:遍历其内部时可按添加顺序======TreeSet:可按照添加元素指定属性排序
(1)、无序性:不等于随机。 存储的数据在底层数组中并非按照数组索引的顺序添加,而是根据数组的哈希值。
(2)、不可重复性
保证添加的元素按照equals() 判断时,不能返回true。相同元素只添加一个 2、代码查验学习

Person 类

package learn.clection;

public class Person {
    private String name;
    private String profession;
    private int age;

    //空参构造器
    public Person() {

    }
    //全参构造器
    public Person(String name, String profession, int age) {
        this.name = name;
        this.profession = profession;
        this.age = age;
    }
//获取名字
    public String getName() {
        return name;
    }
//设置名字
    public void setName(String name) {
        this.name = name;
    }
//获取职业
    public String getProfession() {
        return profession;
    }
//设置职业
    public void setProfession(String profession) {
        this.profession = profession;
    }
//获取年龄
    public int getAge() {
        return age;
    }
//设置年龄
    public void setAge(int age) {
        this.age = age;
    }

    //重写equals
    @Override
    public boolean equals(Object o) {
        System.out.println("使用equals()");
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Person person = (Person) o;

        return name.equals(person.name);
    }

    //重写toString()方法
    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + ''' +
                ", profession='" + profession + ''' +
                ", age=" + age +
                '}';
    }
}

User 类

package learn.clection;

public class User {
    private String name;
    private String profession;
    private int age;

    public User() {
    }

    public User(String name, String profession, int age) {
        this.name = name;
        this.profession = profession;
        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 name.equals(user.name);
    }

    @Override
    public int hashCode() {
        int result = name.hashCode();
        result = 31 * result + profession.hashCode();
        result = 31 * result + age;
        return result;
    }
}

单元测试

 @Test
    public void testSet(){
       Set set1 = new HashSet();
       set1.add(123);
       set1.add(456);
       set1.add("aa");
       set1.add("BB");
       set1.add(new Person());
       //次处的两个类对应得两个对象的equals() 方法只比较 name
       // 相同返回true
       System.out.println("两个对象比较返回值为:");
       Person person = new Person("Tom", "程序员", 26);
       User user = new User("Tom", "程序员", 26);
       System.out.println(person.equals(user));//true

       set1.add(new Person("Tom","程序员",26));
       set1.add(new User("Tom","程序员",26));

       System.out.println("遍历的结果为:(可以看出两个对象只有一个存入set1)");
       System.out.println("");
       Iterator iterator = set1.iterator();
       while (iterator.hasNext()){
           System.out.println(iterator.next());
       }
   }

运行结果

两个对象比较返回值为:
使用equals()
false
遍历的结果为:(可以看出两个对象只有一个存入set1)

aa
BB
learn.clection.User@3dbb3858
456
Person{name='Tom', profession='程序员', age=26}
123
Person{name='null', profession='null', age=0}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5716301.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-18
下一篇 2022-12-18

发表评论

登录后才能评论

评论列表(0条)

保存