1、使用HashSet建立对象、添加元素并使用两种方法遍历
代码实现

public class SetDemo {public static void main(String[] args) {Set<String> set = new HashSet();set.add("猴子");set.add("八戒");set.add("唐僧");set.add("沙僧");Iterator<String> iter = set.iterator();while(iter.hasNext()) {String name = iter.next();System.out.println(name);}System.out.println("---------这是一条分隔线---------");for(String str : set) {String name = str;System.out.println(name);}}
}

2、问题:如果添加的是自定义类的对象,那么还能自动去重吗?
不确定咱就测试一下
代码实现:

//使用HashSet存储自定义类的对象Set<Student> stu = new HashSet();stu.add(new Student("猴子","201801",99));//名字不一样,学号一样stu.add(new Student("八戒","201801",99));//名字一样,学号不一样stu.add(new Student("猴子","201802",99));//名字、学号都一样stu.add(new Student("猴子","201801",99));//名字学号都不一样stu.add(new Student("唐僧","201803",99));Iterator<Student> iter1 = stu.iterator();while(iter1.hasNext()) {Student stu1 = iter1.next();System.out.println(stu1);}

结果输出的结果发现,它完全不去重,所以jvm也没那么智能。。。。。

解决方法:
第一步:重写hashCode方法(以借助学号去重为例)
代码实现:

public int hashCode() {return stuNumber.hashCode();}

第二步:重写equals方法
代码实现:

public boolean equals(Object obj) {if(obj == this ) {return true;}else {if(obj != null && obj instanceof Student) {Student stu = (Student) obj;if(stu.stuNumber.equals(stuNumber)) {return true;}}}return false;}

注:
如果要出现下图界面需要使用 :ctrl + shift + t
3、存储的规则:
(1)将要存出的对象进行hash,进而得到要对象存储的位置
(2)检查要存储的位置是否有元素,如果不存在,则直接存储到当前位置,如果存在,判断将要存储的元素与当前位置已有的元素是否相等(使用equals),如果相等则不改变,如果不相等会通过单链表形式存储到当前位置。

【java】第二十二节课(HashSet)相关推荐

  1. 201671010117 2016-2017-2 《Java程序设计》Java第二周学习心得

    Java第二周学习心得 这一周老师在周四进行了课堂测验,完全出乎我的意料,我以为老师会在前两周上课讲一下,由于我在课前没有好好准备,反转课堂来的有的措手不及,那些题很多很多都不会,也错了很多,班上有很 ...

  2. 基于JAVA第二课堂选课系统计算机毕业设计源码+系统+lw文档+部署

    基于JAVA第二课堂选课系统计算机毕业设计源码+系统+lw文档+部署 基于JAVA第二课堂选课系统计算机毕业设计源码+系统+lw文档+部署 本源码技术栈: 项目架构:B/S架构 开发语言:Java语言 ...

  3. java个十百千万位余数_1 Java第三课[流程控制]

    1 Java第三课[流程控制] 1.1 回顾: 1. 标识符的命名:标识符通常意义上是指 类名,包名,方法名,属性名,普通变量等等. 2. 类命名:每个单词的首字母大写; 3. 变量命名规则:字母数字 ...

  4. 实践数据湖iceberg 第二十一课 flink1.13.5 + iceberg0.131 CDC(测试成功INSERT,变更操作失败)

    系列文章目录 实践数据湖iceberg 第一课 入门 实践数据湖iceberg 第二课 iceberg基于hadoop的底层数据格式 实践数据湖iceberg 第三课 在sqlclient中,以sql ...

  5. Java第六课——画图板

    Java第六课--画图板 这节课画一个画图板,可以画线画圆,还可以通过递归画出好看的图案如:谢尔宾斯基三角形,康托尔方形集,甚至立体图门格海绵. 首先创建一个窗体.定义一个类和一个方法. public ...

  6. JAVA+MySQL 数据库课设的问题及解答的整理 以【学生管理系统】为例

    JAVA+MySQL 数据库课设的问题及解答的整理 以[学生管理系统]为例.帅气学长哦! 编写这篇博文初衷 MySQL的一些问题 Eclipse导入项目的一些问题 数据库的建立和连接 最后一步 编写这 ...

  7. java第二次上机实验程序_20165104-JAVA第二次实验

    20165104孟凡斌-JAVA第二次实验 本次实验在同学得帮助下,成功地在周一实验课之前完成,并在课后向同学请教,有了更深得领悟. 以下是我的实验报告 一.面向对象程序设计1--单元测试和TDD 实 ...

  8. 第十二节课翻滚吧轮胎

    第十二节课翻滚吧轮胎 一.复习队列动作 小朋友们我们已经上了十几节课了今天教官要检查一下你们队列掌握的怎么样了,复习完之前学习的内容之后我们今天做两遍游戏好不好,"好"首先呢我们要 ...

  9. 第二十一课.DeepGraphLibrary(二)

    目录 构建GNN模块 官方SAGEConv和HeteroGraphConv用法 SAGEConv HeteroGraphConv 利用DGL构建SAGE DGL图数据集 DGLDataset 下载原始 ...

最新文章

  1. COM:下一代微生物组技术在作物生产中的应用——局限性以及基于知识的解决方案的需求
  2. 栈空间不够会报错吗_网站更换域名和空间会对优化有影响吗?
  3. 汇编语言转成c语言,如何把汇编语言转换成C语言
  4. spring-data-jpa 二、多对一结构、Repository
  5. 10天学安卓-第九天
  6. windows cmd 窗口 显示信息慢_Windows系统直接运行Linux,竟是如此简单
  7. 分布式系统部署、监控与进程管理的几重境界
  8. 2020阿里云双12-企业飞天会员年终盛典全攻略
  9. 拉普拉斯算子_图机器学习图拉普拉斯算子的离散正则性,141页ppt,Discrete regularity graph Laplacians...
  10. mysql 5.6 my.cnf配置文件_mysql 5.6 my.cnf 配置
  11. android--显式跳转和隐式跳转
  12. SOLIDWORKS PDM 2021安装步骤
  13. idou老师教你学Istio 16:如何用 Istio 实现微服务间的访问控制
  14. 日系插画学习笔记(十二):如何增加画面完整度
  15. Win10怎么关闭屏幕保护?Windows10禁用屏保步骤
  16. Jumpserver界面设置及界面功能
  17. 优美图案c语言程序,C语言经典例题100例——C语言练习实例65解答(一个最优美的图案)...
  18. Cravatar:WordPress网站Gravatar头像完美替代方法
  19. VC的静态链接库 动态链接库
  20. Could not load dynamic library ‘libcusolver.so.11‘; dlerror: libcusolver.so.11: cannot open shared o

热门文章

  1. Go 分布式学习利器(7)-- 字符串
  2. K8S - Kubernetes简介
  3. layui上传图片接口
  4. 怎样快速学习React
  5. Redis集群官方推荐方案 Redis-Cluster
  6. C语言之分支结构 if(一)
  7. js 抛出异常 throw
  8. 基础数据结构【一】————数组
  9. SQL Server 存储过程的分页方案比拼
  10. php与Ajax实例