TreeSet有序子类;

HashSet无序子类

重复重复元素,Object对象是通过equals和hashCode来进行过滤的。

如果将上一篇提到中的例子中的TreeSet,换成HashSet,那么代码就不会过滤从的对象

HashSet无序子类,如何过滤重复的对象呢?(单个元素是可以过滤,但相同的对象不会)

Person:

public class Person implements Comparable<Person> {

	private String name;
private int age; public Person(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 String toString() {
return "姓名:" + name + ", 年龄:" + age + "";
} public int compareTo(Person o) {
// TODO 自动生成的方法存根
if(this.age > o.age)
{
return 1;
}else if(this.age < o.age)
{
return -1;
}else{
//如果age年龄相同需要在判断name,是否重复
return this.name.compareTo( o.name );
}
} }

  

SetDemo3:

Set<Person> allSet = new HashSet<Person>();

		allSet.add(new Person("张三",30));
//重复对象
allSet.add(new Person("张三",30));
allSet.add(new Person("李四",30));
allSet.add(new Person("王五",31));
allSet.add(new Person("赵六",31));
allSet.add(new Person("田七",32));
//重复对象
allSet.add(new Person("田七",32)); System.out.println(allSet);

输出结果:

[姓名:王五, 年龄:31, 姓名:田七, 年龄:32, 姓名:田七, 年龄:32, 姓名:张三, 年龄:30, 姓名:张三, 年龄:30, 姓名:李四, 年龄:30, 姓名:赵六, 年龄:31]

这时需要过滤掉重复的对象,那么Person还需要复写equels,和HashCode两个方法,这两个方法作用了过滤重复的对象:

public int hashCode()
{
return this.name.hashCode() * this.age;
} public boolean equals(Object o)
{
if(this == o)
{
return true;
}
if( !(o instanceof Person) )
{
return false;
}
Person p = (Person) o;
if(this.name.equals(p.name) && this.age == p.age)
{
return true;
}else{
return false;
} }

  

执行的结果:

[姓名:赵六, 年龄:31, 姓名:李四, 年龄:30, 姓名:张三, 年龄:30, 姓名:王五, 年龄:31, 姓名:田七, 年龄:32]

  

java:Set对象TreeSet有序子类,HashSet无序子类,重复对象二的更多相关文章

  1. java: Set类及子类:TreeSet有序子类,HashSet无序子类:重复元素

    Set类及子类: TreeSet有序子类: HashSet无序(散列)子类 HashSet子类的内容是没有顺序的,单个元素也不会重复的(对象除外). Set<String> allSet ...

  2. Java深入了解TreeSet

    Java中的TreeSet是Set的一个子类,TreeSet集合是用来对象元素进行排序的,同样他也可以保证元素的唯一.那TreeSet为什么能保证元素唯一,它是怎样排序的呢?先看一段代码: publi ...

  3. JAVA之旅(二十)—HashSet,自定义存储对象,TreeSet,二叉树,实现Comparator方式排序,TreeSet小练习

    JAVA之旅(二十)-HashSet,自定义存储对象,TreeSet,二叉树,实现Comparator方式排序,TreeSet小练习 我们继续说一下集合框架 Set:元素是无序(存入和取出的顺序不一定 ...

  4. Java 容器 & 泛型:三、HashSet,TreeSet 和 LinkedHashSet比较

    Writer:BYSocket(泥沙砖瓦浆木匠) 微博:BYSocket 豆瓣:BYSocket 上一篇总结了下ArrayList .LinkedList和Vector比较,今天泥瓦匠总结下Hash ...

  5. Java集合详解7:HashSet,TreeSet与LinkedHashSet

    今天我们来探索一下HashSet,TreeSet与LinkedHashSet的基本原理与源码实现,由于这三个set都是基于之前文章的三个map进行实现的,所以推荐大家先看一下前面有关map的文章,结合 ...

  6. 《java入门第一季》之HashSet存储自定义对象问题以及注意事项

    上一篇http://blog.csdn.net/qq_32059827/article/details/51578158 写到存储字符串类型的时候出现了无序,而且这个无序不是随机那种无序,它是有一定存 ...

  7. Android(java)学习笔记179:BroadcastReceiver之 有序广播和无序广播(BroadcastReceiver优先级)

    之前我们在Android(java)学习笔记178中自定义的广播是无序广播,下面我们要了解一下有序广播:   1.   我们首先了解一下有序广播和无序广播区别和联系? (1) 有序广播> 接受者 ...

  8. (转载) Java子类与父类之间的对象转换

    在使用Java的多态机制时,常常使用的一个特性便是子类和父类之间的对象转换.从子类向父类的转换称为向上转换(upcasting),通过向上转换,我们能够在编写程序时采用通用程序设计的思想,在需要使用子 ...

  9. 将子类对象引用赋值给超类对象 JAVA 编译时多态性

    将子类对象引用赋值给超类对象 JAVA 编译时多态性(转) (2012-05-10 11:24:05) 转载▼ 标签: 杂谈 分类: 也无晴_soft 1.通过将子类对象引用赋值给超类对象引用变量来实 ...

随机推荐

  1. 使用xampp和HBuilder搭建php环境

    1.首先你的电脑里面要有两个软件  xampp 和 HBuilder xampp: HBuilder: 这两个软件都是免费的,在安装过程中也无需费力,只要设置好路径就行了. 在xampp安装过程中,需 ...

  2. 我们建了一个 Golang 硬核技术交流群(内含视频福利)

    目录 目录 Golang 是什么? 我们为什么选择 Golang? Golang 是云时代的宠儿! 我们搞了一场 Golang 入门直播 Golang 是什么? Golang 是谷歌 2009 年发布 ...

  3. 快速编写 <a> ————CSS3

    a{ text-decoration:none; } a:link{ color:white; } a:visited { color:white; } a:hover { color:blue; } ...

  4. python接口自动化:requests+ddt+htmltestrunner数据驱动框架

    该框架分为四个包:xc_datas.xc_driven.xc_report.xc_tools. xc_datas:存放数据,xc_driven:存放执行程序,xc_report:存放生成的报告,xc_ ...

  5. 操作系统 - Linux操作系统 - Centos - Centos6.5 - 安装|命令|使用汇总

    快捷键 打开终端 右键 —>open terminal 网络配置 配置文件修改 - ONBOOT=no 修改为 ONBOOT=yes 工具 - gcc 安装 yum -y install gcc ...

  6. 【windows】windows安全基础

    windows安全基础 安全主体 security principal 是可以进行身份验证的实体. 哪个安全主体在要求访问?这个维度可以是用户,计算机和进程.一旦确认以后,系统就会发放SID. 例子: ...

  7. OpenCV在ARM-linux上的移植过程遇到的问题3---共享库中嵌套库居然带路径【未解决】

    [Linux开发]OpenCV在ARM-linux上的移植过程遇到的问题3-共享库中嵌套库居然带路径[未解决] 标签(空格分隔): [Linux开发] 移植opencv到tq2440 一.下载open ...

  8. 63 (OC)* NSAutoreleasePool 自动释放池

    目录 0:ARC 1: 自动释放池 2:NSAutoreleasePool实现原理 3:autorelease 方法 4: Runloop和Autorelease的关系 5: Using Autore ...

  9. Mysql-使用xtrabackup添加Slave

    1.备份主库数据(主库操作) (1)安装innobackupex # yum -y install http://www.percona.com/downloads/percona-release/r ...

  10. JS 数组的常用方法详解归纳之改变原数组方法

    shift() 把数组的第一个元素从其中删除,并返回第一个元素的值, 如果数组是空的,那么 shift() 方法将不进行任何操作,返回 undefined 值.请注意,该方法不创建新数组,而是直接修改 ...