栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java中的Set

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java中的Set

特点

  • 不包含重复元素的集合
  • 没有带索引的方法,所以不能使用普通for循环遍历
哈希值

是JDK根据对象的地址或者字符串或者数字算出来的 int 类型的数值。

Object类中有一个方法可以获取对象的哈希值。

  • public int hashCode():返回对象的哈希码值

对象的哈希值特点

  • 同一个对象多次调用hashCode()方法返回的哈希值是相同的
  • 默认情况下,不同对象的哈希值是不同的。而重写hashCode()方法,可以实现让不同对象的哈希值相同
//创建学生对象
        Student s1 = new Student("张三",18);

        //同一个对象多次调用hashCode()方法返回的哈希值是相同的
        System.out.println(s1.hashCode());//284720968
        System.out.println(s1.hashCode());//284720968
        //两次输出相同
        System.out.println("----------------");

        Student s2 = new Student("张三",18);//再创建学生对象
        //默认情况下,不同对象的哈希值是不相同的
        System.out.println(s2.hashCode());//189568618
        System.out.println("----------------");


        System.out.println("hello".hashCode());//99162322
        System.out.println("world".hashCode());//113318802
        System.out.println("1314".hashCode());//1510341
        //你会发现你和我的是一样的
        System.out.println("----------------");

        System.out.println("第一".hashCode());//997460
        System.out.println("第二".hashCode());//997600
        System.out.println("第三名".hashCode());//30943056
        //相同长度的汉字,哈希值是一样的,因为这种写法默认重写hashCode()方法
HashSet

特点

  • 底层数据结构是哈希表
  • 对集合的迭代顺序不作任何保证,也就是说不保证存储和取出的元素一致
  • 没有带索引的方法,所以不能使用普通 for 循环遍历
		//创建对象
        HashSet set = new HashSet();

        //添加元素
        set.add("hello");
        set.add("world");
        set.add("1314");
        set.add("1314");//重复
        
        //遍历
        for(String s:set){
            System.out.println(s);
        }
        //你会发现是不按顺序的
练习:HashSet集合存储学生对象并遍历

题:创建一个存储学生对象的集合,存储多个学生对象,使用程序实现在控制台遍历该集合。
要求:学生对象的成员变量值相同,我们就认为是同一个对象

创建学生类,并重写equals()和hashCode()方法:
在学生类的按下Alt+Insert,选择equals() and hashCode(),选择intelliJ Default,然后不停的next,最后finish。

public class Student {
    private String name;
    private int age;

    public Student(){}
    public Student(String name, int age) {
        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;
    }

	//重写这两个方法
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Student student = (Student) o;

        if (age != student.age) return false;
        return name != null ? name.equals(student.name) : student.name == null;
    }

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

Demo:

import java.util.HashSet;

public class Demo {

    public static void main(String[] args) {
        //创建haashSet集合对象
        HashSet hs = new HashSet();

        Student s1 = new Student("张三",18);
        Student s2 = new Student("张三",18);
        Student s3 = new Student("李四",19);
        Student s4 = new Student("王五",20);

        hs.add(s1);
        hs.add(s2);
        hs.add(s3);
        hs.add(s4);

        for(Student S:hs){
            System.out.println(S.getName()+","+S.getAge());
        }
    }
}

输出:

王五,20
张三,18
李四,19
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/459887.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号