增加java基础——hashSet中存放对象的比较规则
来源:互联网 发布:java内部类ppt 编辑:程序博客网 时间:2024/04/29 01:37
只有不断找寻机会的人才会及时把握机会。
在项目中,用的集合对象大部分是List和Map,但是Set这个对象却比较少用,突然有一天,我想起来,本来想敲个demo的,但是已经忘记里面的存放对象的规则了,那么今天我们来一起复习一下吧!
Set对象是Collection的一个子类,它的特点在于不能存放于重复的对象,什么叫做重复,重复的规则又是怎么定的呢?重点来了,我们今天就来看hashSet重复的规则。
hashSet中维护了一张哈希表,所以是按你对象的hashCode的值来判断你是否是同一个对象的,然后再去判断equals方法,然后才会判断你是不是相同的对象。
那么接下来,我们自己写个Demo出来复习一下吧。
我们来写一个判断动物是不是同一只动物,如果他的年龄和名字都相同的话我们就判断他的同一只动物,重点是什么呢?就是重写hashCode()和equals()方法。
看下我们的animals类:
public class Animals { private String name; private int age; public Animals(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 "Animals{" + "name='" + name + '\'' + ", age=" + age + '}'; } @Override public int hashCode() { return new Integer(this.getAge()); } @Override public boolean equals(Object obj) { if(obj==null){ return false; } if(obj!=null && obj.getClass() == this.getClass()){ Animals animals = (Animals) obj; return this.getName().equals(((Animals) obj).getName()) && this.getAge() == ((Animals) obj).getAge(); } return super.equals(obj); }}
然后看下我们的执行代码:
public class SetMain { public static void main(String[] args){ Set<Animals> set = new HashSet<>(); Animals animals1 = new Animals("熊猫", 21); Animals animals2 = new Animals("熊猫", 20); set.add(animals1); set.add(animals2); Iterator<Animals> iterator = set.iterator(); while(iterator.hasNext()){ Animals animals = iterator.next(); System.out.println(animals.toString()); } }}
看,我们equals中判断的是如果这两只动物的名字和年龄都相同的时候才能判定同一只动物,这里我们的执行代码是年龄不同的,所以应该输出两只动物,我们看下执行结果:
Animals{name='熊猫', age=20}Animals{name='熊猫', age=21}
怎么样,我们是不是达到我们预期的效果了呢?
现在我们改成相同的年龄看看能不能达到我们想要的效果:
public class SetMain { public static void main(String[] args){ Set<Animals> set = new HashSet<>(); Animals animals1 = new Animals("熊猫", 20); Animals animals2 = new Animals("熊猫", 20); set.add(animals1); set.add(animals2); Iterator<Animals> iterator = set.iterator(); while(iterator.hasNext()){ Animals animals = iterator.next(); System.out.println(animals.toString()); } }}
看下执行结果:
Animals{name='熊猫', age=20}
Ok,搞定,有没有一种拾忆的感觉呢,那么熟悉有那么陌生,那么我只能说,骚年,回家好好复习java基础吧。。。。。。。。。。。。。。
代码很简单,只要多练习就能完成,加油!!!!
0 0
- 增加java基础——hashSet中存放对象的比较规则
- Java中HashMap、HashSet中Object类型对象比较问题
- java中hashset是怎么保证内部只存放一份对象
- Java学习拾遗3——HashSet中加入自定义的类的对象
- JAVA基础之——HashSet中是如何判断元素是否重复的
- java基础——String存放的区域
- Java基础——HashSet源码分析
- Java基础 —— HashSet 与 TreeSet
- JAVA 对象存放的位置
- java虚拟机栈中何时存放对象的引用变量?
- java对象——对象的比较
- Java中对象的比较
- java中对象的比较
- 黑马程序员一在hashSet集合中比较对象需要覆盖的两个方法hashCode(),equlas()
- java基础巩固系列(五):ArrayList与HashSet的比较,以及HashCode分析
- 脚本的存放规则
- java中hashset的用法
- java中HashSet的实现
- jsp表格中的<tr> <td> <th> <br> <b> <p>用法
- 控制redo日志的归档速度
- shell脚本学习笔记(一)—— shell基础及sed
- 数据及编码问题
- 《CANOpen》 学习笔记5
- 增加java基础——hashSet中存放对象的比较规则
- 437. Path Sum III
- 把自己常用的LATEX公式记录下来,以后就不用每次再搜了
- 通俗易懂JSONP讲解
- Android 性能优化 概念介绍
- E - Repository (字典树)
- 冒泡排序原理
- ListView中的观察者模式
- lightoj1085 - All Possible Increasing Subsequences(树状数组)