java:Set对象TreeSet有序子类,HashSet无序子类,重复对象二
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无序子类,重复对象二的更多相关文章
- java: Set类及子类:TreeSet有序子类,HashSet无序子类:重复元素
Set类及子类: TreeSet有序子类: HashSet无序(散列)子类 HashSet子类的内容是没有顺序的,单个元素也不会重复的(对象除外). Set<String> allSet ...
- Java深入了解TreeSet
Java中的TreeSet是Set的一个子类,TreeSet集合是用来对象元素进行排序的,同样他也可以保证元素的唯一.那TreeSet为什么能保证元素唯一,它是怎样排序的呢?先看一段代码: publi ...
- JAVA之旅(二十)—HashSet,自定义存储对象,TreeSet,二叉树,实现Comparator方式排序,TreeSet小练习
JAVA之旅(二十)-HashSet,自定义存储对象,TreeSet,二叉树,实现Comparator方式排序,TreeSet小练习 我们继续说一下集合框架 Set:元素是无序(存入和取出的顺序不一定 ...
- Java 容器 & 泛型:三、HashSet,TreeSet 和 LinkedHashSet比较
Writer:BYSocket(泥沙砖瓦浆木匠) 微博:BYSocket 豆瓣:BYSocket 上一篇总结了下ArrayList .LinkedList和Vector比较,今天泥瓦匠总结下Hash ...
- Java集合详解7:HashSet,TreeSet与LinkedHashSet
今天我们来探索一下HashSet,TreeSet与LinkedHashSet的基本原理与源码实现,由于这三个set都是基于之前文章的三个map进行实现的,所以推荐大家先看一下前面有关map的文章,结合 ...
- 《java入门第一季》之HashSet存储自定义对象问题以及注意事项
上一篇http://blog.csdn.net/qq_32059827/article/details/51578158 写到存储字符串类型的时候出现了无序,而且这个无序不是随机那种无序,它是有一定存 ...
- Android(java)学习笔记179:BroadcastReceiver之 有序广播和无序广播(BroadcastReceiver优先级)
之前我们在Android(java)学习笔记178中自定义的广播是无序广播,下面我们要了解一下有序广播: 1. 我们首先了解一下有序广播和无序广播区别和联系? (1) 有序广播> 接受者 ...
- (转载) Java子类与父类之间的对象转换
在使用Java的多态机制时,常常使用的一个特性便是子类和父类之间的对象转换.从子类向父类的转换称为向上转换(upcasting),通过向上转换,我们能够在编写程序时采用通用程序设计的思想,在需要使用子 ...
- 将子类对象引用赋值给超类对象 JAVA 编译时多态性
将子类对象引用赋值给超类对象 JAVA 编译时多态性(转) (2012-05-10 11:24:05) 转载▼ 标签: 杂谈 分类: 也无晴_soft 1.通过将子类对象引用赋值给超类对象引用变量来实 ...
随机推荐
- itchat初步解读登录(转)
原文:https://blog.csdn.net/coder_pig/article/details/81357810 itchat的登录采取的是通过itchat.auto_login()这个函数来完 ...
- FLUME安装&环境(二):拉取MySQL数据库数据到Kafka
Flume安装成功,环境变量配置成功后,开始进行agent配置文件设置. 1.agent配置文件(mysql+flume+Kafka) #利用Flume将MySQL表数据准实时抽取到Kafka a1. ...
- 项目中引入kafka
项目如果需要引入kafka,可以从以下几个流程走: 1.pom文件引对应的jar包 <dependency> <groupId>org.apache.kafka</gro ...
- HTML5 表单的补充+注意事项
input标签中 type="image" 与 type="submit"属性 的区别 (下文简写image和submit) 1.这两者都可以响应请 ...
- jmap -heap命令用法
用jmap -heap命令可以查看linux堆内存分布 具体用法 1:先查出tomcat的进程号 例如: 然后执行 jmap -heap 7095 可以打印出整体的堆信息 可以看到经过分配的存活区 ...
- Linux-定时任务-打包与压缩
figure:first-child { margin-top: -20px; } #write ol, #write ul { position: relative; } img { max-wid ...
- realloc ------ 扩大malloc得到的内存空间
char* p = malloc(1024);char* q = realloc(p,2048); 现在的问题是我们应该如何处理指针 p. 刚开始按照我最直观的理解,如果就是直接将 p = NULL; ...
- Java——ArrayList使用Demo
三种遍历方式 通过迭代器Iterator遍历 通过get(索引值)遍历 for循环遍历 ArrayList使用Demo package list; import java.util.ArrayList ...
- [BZOJ 3456]城市规划(cdq分治+FFT)
[BZOJ 3456]城市规划(cdq分治+FFT) 题面 求有标号n个点无向连通图数目. 分析 设\(f(i)\)表示\(i\)个点组成的无向连通图数量,\(g(i)\)表示\(i\)个点的图的数量 ...
- BZOJ 1906. 树上的蚂蚁
传送门 发现蚂蚁不多,所以考虑两两枚举然后判断 那么首先要求出两条链的公共部分,然后根据之间在公共链的时间段和是同向还是反向进行判断 思路简单但是细节很多...... 首先求链的公共部分,设两种蚂蚁为 ...