• 1-26HashSet简介


    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方法

  • 相关阅读:
    斜率dp+cdq分治
    踢罐子 [几何+乱搞]
    [HDU3710] Battle Over Cities [树链剖分+线段树+并查集+kruskal+思维]
    [xsy1129] flow [树链剖分和线段树一起优化网络流][我也不知道这是什么鬼标签]
    [CF666E] Forensic Examination [广义后缀自动机+线段树合并]
    省选算法学习-BSGS与exBSGS与二次剩余
    省选算法学习-回文自动机 && 回文树
    省选算法学习-后缀数组+后缀自动机+后缀树
    Password [分块]
    随机过程——泊松过程
  • 原文地址:https://www.cnblogs.com/superfly123/p/10483296.html
Copyright © 2020-2023  润新知