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集合中存储重复元素的时候返回为falseboolean 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方法@Overridepublic String toString() {return "Person [name=" + name + ", age=" + age + "]";}//重写equals方法@Overridepublic 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方法

转载于:https://www.cnblogs.com/superfly123/p/10483296.html

1-26HashSet简介相关推荐

  1. etcd 笔记(01)— etcd 简介、特点、应用场景、常用术语、分布式 CAP 理论、分布式原理

    1. etcd 简介 etcd 官网定义: A highly-available key value store for shared configuration and service discov ...

  2. Docker学习(一)-----Docker简介与安装

    一.Docker介绍 1.1什么是docker Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源 Docker可以让开发者打包他们的应用以及依赖包到一个轻量级,可移植 ...

  3. 【Spring】框架简介

    [Spring]框架简介 Spring是什么 Spring是分层的Java SE/EE应用full-stack轻量级开源框架,以IOC(Inverse Of Control:反转控制)和AOP(Asp ...

  4. TensorRT简介

    TensorRT 介绍 引用:https://arleyzhang.github.io/articles/7f4b25ce/ 1 简介 TensorRT是一个高性能的深度学习推理(Inference) ...

  5. 谷粒商城学习笔记——第一期:项目简介

    一.项目简介 1. 项目背景 市面上有5种常见的电商模式 B2B.B2C.C2B.C2C.O2O B2B 模式(Business to Business),是指商家和商家建立的商业关系.如阿里巴巴 B ...

  6. 通俗易懂的Go协程的引入及GMP模型简介

    本文根据Golang深入理解GPM模型加之自己的理解整理而来 Go协程的引入及GMP模型 一.协程的由来 1. 单进程操作系统 2. 多线程/多进程操作系统 3. 引入协程 二.golang对协程的处 ...

  7. Linux 交叉编译简介

    Linux 交叉编译简介 主机,目标,交叉编译器 主机与目标 编译器是将源代码转换为可执行代码的程序.像所有程序一样,编译器运行在特定类型的计算机上,输出的新程序也运行在特定类型的计算机上. 运行编译 ...

  8. TVM Operator Inventory (TOPI)简介

    TOPI简介 这是 TVM Operator Inventory (TOPI) 的介绍.TOPI 提供了比 TVM 具有更高抽象的 numpy 风格的,通用操作和调度.TOPI 如何在 TVM 中,编 ...

  9. 计算机视觉系列最新论文(附简介)

    计算机视觉系列最新论文(附简介) 目标检测 1. 综述:深度域适应目标检测标题:Deep Domain Adaptive Object Detection: a Survey作者:Wanyi Li, ...

  10. 2021年大数据ELK(二十三):Kibana简介

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. Kibana简介 通过上面的这张图就可以看到,Kibana可以用来展示丰富的图表. ...

最新文章

  1. SCOM警报通知新特性:即时消息通知
  2. Leetcode 204. 计数质数 解题思路及C++实现
  3. cornerMinEigenVal函数
  4. ckeditor源码编辑模式,添加style、javascript内容丢失的解决
  5. 关于如何升级gcc版本及相关的标准库问题
  6. SQL Server 2016 RC0 安装(超多图)
  7. Web 2.0 编程思想:16条法则
  8. PHP面向对象构造函数,析构函数
  9. 985毕业,3年大数据经验,面试阿里腾讯失败,只因做不好报表
  10. SpringMVC项目中中文字符乱码问题及解决办法总结(非专业最优解决办法) -- ajax传值乱码; request.getParameter()乱码;
  11. Neural networks and deep learning C1总结(一)
  12. 实现1V1音视频实时互动直播系统 十二、第一节 STUN_TURN服务器搭建
  13. 人工智能之父艾伦·麦席森·图灵
  14. owasp top10
  15. 前端封装WebSocket
  16. 美丽的余霞风景mac高清动态壁纸
  17. SpringBoot启动报错:Failed to introspect Class [XXX] from ClassLoader解决办法
  18. 压缩winsxs文件夹的正确姿势
  19. (转)Let’s make a DQN 系列
  20. 基于TCAM 的高速路由查找

热门文章

  1. 远程Linux主机安装Oh My Zsh
  2. MySQL命令之mysqlhotcopy -- 热备份
  3. 关于压缩工具 7z(7-zip) 的选项 -u(更新压缩档案中的文件)的解读
  4. Linux 命令之 du -- 显示每个文件和目录的磁盘使用空间/所占用的磁盘空间大小/所使用的磁盘空间大小/查看文件和目录的大小
  5. 微信小程序注册/登录接口开发
  6. xxx钻石商城功能开发需求
  7. java 快速io_Java编程在ICPC快速IO实现源码
  8. docker初识_初识 docker 搭建自己的开发环境
  9. 显示请求_学习记录:HTTP的响应与请求amp;Curl
  10. linux数组操作 增删改查,linuxea:go数组与数组增删改查(19)