• 29、HashSet简介


    Set的特点

    Set里面存储的元素不能重复,没有索引,存取顺序不一致。

    package com.monkey1024.set;
    
    import java.util.HashSet;
    
    /**
     * Set的特点:元素不能重复,没有索引,存取顺序不一致
     *
     */
    public class HashSetTest01 {
    
        public static void main(String[] args) {
    
            HashSet<String> hs = new HashSet<>();
            boolean b1 = hs.add("a");
            // 当向set集合中存储重复元素的时候返回为false
            boolean b2 = hs.add("a");
            hs.add("b");
            hs.add("c");
            hs.add("d");
            System.out.println(hs);
            System.out.println(b1);
            System.out.println(b2);
            //可以使用增强for循环或者迭代器进行遍历
            //只要能用迭代器遍历就能使用增强for循环遍历
            for (String string : hs) {
                System.out.println(string);
            }
        }
    
    }

    向HashSet中添加自定义的Person对象

    package com.monkey1024.bean;
    
    /**
     * Person类
     *
     */
    public class Person {
    
        private String name;
        private int age;
    
        public Person() {
    
        }
    
        public Person(String name, int age) {
            super();
            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;
        }
    
        // 重写toString方法
        @Override
        public String toString() {
            return "Person [name=" + name + ", age=" + age + "]";
        }
    
        //重写equals方法
        @Override
        public boolean equals(Object obj) {
            if(this == obj){
                return true;
            }
            if(obj instanceof Person){
                Person p = (Person)obj;
                if(this.name.equals(p.getName()) && this.age == p.getAge()){
                    return true;
                }
            }
    
            return false;
        }
    
    }

    测试类

    package com.monkey1024.set;
    
    import java.util.HashSet;
    
    import com.monkey1024.bean.Person;
    
    /**
     * Set的特点:元素不能重复,没有索引,存取顺序不一致
     * 向HashSet中添加自定义类
     *
     */
    public class HashSetTest02 {
    
        public static void main(String[] args) {
    
            HashSet<Person> hs = new HashSet<>();
            hs.add(new Person("张三", 20));
            hs.add(new Person("张三", 20));
            hs.add(new Person("李四", 22));
            hs.add(new Person("李四", 22));
            hs.add(new Person("李四", 22));
    
            for (Person p : hs) {
                System.out.println(p);
            }
        }
    
    }

    通过上面代码可以发现打印结果中并没有去除Person中name和age相同的对象,而且equals方法也没有被调用。重写一下Person中的hashcode方法,让eclipse自动生成:

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + age;
        result = prime * result + ((name == null) ? 0 : name.hashCode());
        return result;
    }

    然后再执行测试类时,发现打印的结果中已经去除重复的了。
    这里需要注意:在向HashSet中存放自定义类型对象时,一定要重写hashCode和equals方法

  • 相关阅读:
    jmeter性能测试
    Robotframework 之常用断言关键字
    chrome浏览器的调试器乱码问题
    YDKJS:作用域与闭包
    JavaScript事件循环(Event Loop)机制
    第一次react-native项目实践要点总结
    jsonp 演示实例 —— 基于node
    Jquery属性获取——attr()与prop()
    实现跨域的N种方法
    了解闭包
  • 原文地址:https://www.cnblogs.com/zhuifeng-mayi/p/10133686.html
Copyright © 2020-2023  润新知