zoukankan      html  css  js  c++  java
  • Java容器(HashSet)

    Java容器(HashSet)

    HashSet特点

    • set元素无序且不可重复(元素存入的顺序和取出的顺序是不一致的)
    • HashSet是set接口的一个实现类
    • HashSet可以方便高效地实现去重、集合运算等功能,需要使用集合保存一组对象时,如果要求对象不重复,并且对存取的速度快的场景,就可以使用HashSet。

    注意:自定义的类要存到Hashset中,就必须重写equals()和hashCode()方法(两个方法必须都重写),因为存入元素时候,HashSet会先使用hashCode方法判断是否相等,然后再使用equals()方法判断是否相等,两者之一判断相等都不可以添入。

    HashSet例子

    创建一个Person类

    package com.cwstd.day3;
    
    import java.util.Objects;
    
    public class Person {
        private String name;
        private Integer age;
        public Person(String name, Integer age) {
            this.name = name;
            this.age = age;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Integer getAge() {
            return age;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    
        @Override
        public boolean equals(Object o) {
            Person person=null;
            if(o instanceof Person)
            {
                person=(Person) o;
                if(this.name.equals(person.getName()) && this.age== person.getAge())
                {
                    return  true;
                }
            }
    
            return false;
        }
    
        @Override
        public int hashCode() {
            int res=this.name==null || this.age==null? 0:this.name.hashCode()+this.age.hashCode();
            return res*17;
        }
    }
    
    

    注意:hashCode一般写法:
    例:判断相等的条件name,age,其他条件为sex,hobby

    @Override
    	public int hashCode() {
    		int res=this.name.hashCode()+this.age.hashCode();
    		res = 17 * res + sex.hashCode();
    		res = 17 * res + hobby.hashCode();
    		return res;
    	}
    
    

    测试类

    package com.cwstd.day3;
    
    import org.junit.Test;
    
    import java.util.HashSet;
    import java.util.Iterator;
    
    public class HashSetTest {
        @Test
        public void addHashSet()
        {
            HashSet<Person> hashSet=new HashSet<>();
            hashSet.add(new Person("cwi",22));
            hashSet.add(new Person("cw",22));
            Iterator<Person> iterator =  hashSet.iterator();
            while(iterator.hasNext())
            {
                Person a=iterator.next();
                System.out.println(a.getName());
                System.out.println(a.getAge());
            }
        }
    }
    
  • 相关阅读:
    androd Eclipse Ant 批量打包
    Eclipse中不显示Ant,如何操作
    android Eclipse 多渠道打包
    Android 关于tools
    (转)android studio 使用的主要操作
    Android的NDK开发步骤
    AnimatorSet中before与after的理解
    (转)Android webview 调用相机和照片库 实现文件的上传
    混淆的小记录
    Xamarin.Forms on WPF (Win7)
  • 原文地址:https://www.cnblogs.com/cwstd/p/14709817.html
Copyright © 2011-2022 走看看