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

1-26HashSet简介的更多相关文章

  1. ASP.NET Core 1.1 简介

    ASP.NET Core 1.1 于2016年11月16日发布.这个版本包括许多伟大的新功能以及许多错误修复和一般的增强.这个版本包含了多个新的中间件组件.针对Windows的WebListener服 ...

  2. MVVM模式和在WPF中的实现(一)MVVM模式简介

    MVVM模式解析和在WPF中的实现(一) MVVM模式简介 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在 ...

  3. Cassandra简介

    在前面的一篇文章<图形数据库Neo4J简介>中,我们介绍了一种非常流行的图形数据库Neo4J的使用方法.而在本文中,我们将对另外一种类型的NoSQL数据库——Cassandra进行简单地介 ...

  4. REST简介

    一说到REST,我想大家的第一反应就是“啊,就是那种前后台通信方式.”但是在要求详细讲述它所提出的各个约束,以及如何开始搭建REST服务时,却很少有人能够清晰地说出它到底是什么,需要遵守什么样的准则. ...

  5. Microservice架构模式简介

    在2014年,Sam Newman,Martin Fowler在ThoughtWorks的一位同事,出版了一本新书<Building Microservices>.该书描述了如何按照Mic ...

  6. const,static,extern 简介

    const,static,extern 简介 一.const与宏的区别: const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 执行时刻:宏是预编 ...

  7. HTTPS简介

    一.简单总结 1.HTTPS概念总结 HTTPS 就是对HTTP进行了TLS或SSL加密. 应用层的HTTP协议通过传输层的TCP协议来传输,HTTPS 在 HTTP和 TCP中间加了一层TLS/SS ...

  8. 【Machine Learning】机器学习及其基础概念简介

    机器学习及其基础概念简介 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...

  9. Cesium简介以及离线部署运行

    Cesium简介 cesium是国外一个基于JavaScript编写的使用WebGL的地图引擎,一款开源3DGIS的js库.cesium支持3D,2D,2.5D形式的地图展示,可以自行绘制图形,高亮区 ...

  10. 1.Hibernate简介

    1.框架简介: 定义:基于java语言开发的一套ORM框架: 优点:a.方便开发;           b.大大减少代码量;           c.性能稍高(不能与数据库高手相比,较一般数据库使用者 ...

随机推荐

  1. 【 spring配置文件详解】

    转自: http://book.51cto.com/art/201004/193743.htm Spring配置文件是用于指导Spring工厂进行Bean生产.依赖关系注入(装配)及Bean实例分发的 ...

  2. ActivityManagerService服务线程启动源码分析【转】

    本文转载自:http://blog.csdn.net/yangwen123/article/details/8177702 Android系统服务线程都驻留在SystemServer进程中,由Syst ...

  3. Struts2基础知识

    1.什么是Struts2框架? 答:struts2是一款优秀的mvc框架,集中解决了Controlller的相关问题,解决了部分视图相关的问题(struts2标签): mvc 是一种思想,包括Mode ...

  4. DGA域名——可以每天只生成一个域名,因此最多存在365个 DGA域名;

    Mirai变种中的DGA 分享到: 发布时间:2016-12-12 16:02:57 作者:360网络安全研究院 投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿 那个导致美国断网 ...

  5. Mac的环境变量

    在终端输入: vim ~/.bash_profile 按i切换到INSERT模式.然后把路径按照下面的格式写进去.然后输入:wq保存退出. export PATH=${PATH}:/Users/Dru ...

  6. Nginx基本配置和作用

    nginx可以重新加载文件的.我们直接运行:nginx -s reload 配置文件有没有问题,可以直接输入:nginx -t nginx -s stop就可以关闭 但有时我们就不想它挂的时候访问另外 ...

  7. poj3417 Network——LCA+树上差分

    题目:http://poj.org/problem?id=3417 根据一条边被几个环覆盖来判断能不能删.有几种情况等: 用树上差分,终点 s++,LCA s-=2,统计时计算子树s值的和即可: 用S ...

  8. Tyvj1052(树形DP)

    P1052 没有上司的舞会 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 Ural大学有N个职员,编号为1~N.他们有从属关系,也就是说他们的关系就像一棵以 ...

  9. Android开发--Activity

    一:Activity生命周期 (1)Activity生命周期中的几种方法: protected void onCreate(Bundle savedInstanceState): protected  ...

  10. APP开发过程中需求变更流程

    在APP开发过程中,不可避免的会有需求变更,从以往项目开发过程总结发现,需求变更太频繁,产品一句话需求,没有形成良好的版本迭代概念,频繁的变动影响开发交付日期,但是交付日期又是定死的,严重拖累了开发及 ...