集合Set
2016-02-28 20:15
218 查看
同样是收集对象,在收集过程中有相同的对象,则不再收集,如果有这样的需求,那么可以使用set的接口操作对象。
例如:有一个字符串,当中有很多英文单词,你想知道不重复的单词有几个;
显示结果:
当set收集的是自定义的实体对象的时候,却不能排除相同的数据。例如:
结果显示:并没有去掉重复的对象。
原因是因为HashSet会使用对象的hashCode()与equals()来判断对象是否相同,每个对象的hashCode()取得的值不一样,才会导致没有去掉重复的值。
那么我们需要做的是,重写hashCode()方法,让name和number一样的Student认为是相同的。在Student类中写:
再次执行的时候显示,消除了相同的对象。
例如:有一个字符串,当中有很多英文单词,你想知道不重复的单词有几个;
<span style="font-size:18px;"> public class Words{ public static void main (string args[]){ Scanner scanner =new Scanner(); System.out.print(“请输入英文:”); String line=scanner.nextLine(); String[] tokens=line.split(“ “); Set words=new HashSet(); for(String token :tokens){ words.add(token); } System.out.print(“不重复单词有 %d 个:%s%n”,words.size(),words); } } </span>
显示结果:
当set收集的是自定义的实体对象的时候,却不能排除相同的数据。例如:
<span style="font-size:18px;">class Student{ private String name; private String number; Student(String name,String number){ this.name=name; this.number=number; } public class Students{ public static void main (String[] args){ Set set=new HashSet(); set.add(new Student(“Justin”,”B835031”)); set.add(new Student(“Monica”,”B825032”)); set.add(new Student(“Justin”,”B835031”)); System.out.print(set); } } </span>
结果显示:并没有去掉重复的对象。
原因是因为HashSet会使用对象的hashCode()与equals()来判断对象是否相同,每个对象的hashCode()取得的值不一样,才会导致没有去掉重复的值。
那么我们需要做的是,重写hashCode()方法,让name和number一样的Student认为是相同的。在Student类中写:
<span style="font-size:18px;">@Override public int hashCode(){ int hash=5; hash=13*hash+(this.name!=null?this.name.hashCode():0); hash=13*hash+(this.number!=null?this.number.hashCode():0); return hash; } </span>
再次执行的时候显示,消除了相同的对象。
相关文章推荐
- BZOJ_P1461 字符串的匹配(KMP+树状数组)
- padding
- 测试一下windowsLiveWriter
- 【BZOJ3260】跳【组合数】
- Android下Affinities和Task
- ACM杭电的AC回顾
- JavaScript面向对象实例---tab选项卡
- 如何用IDE调试MR任务(一)(2016-01)
- Java多线程的两种实现方式
- 在.NET平台用DocX操作Word文件
- LeetCode-198. House Robber
- 手机触控事件touch
- 24.php中使用Iterator,ArrayAccess和Countable
- JVM工作原理和特点(一些二逼的逼神面试官会问的问题)
- 【bzoj3698】XWW的难题 有上下界的网络流
- 我的2015
- BZOJ-3226 校门外的区间 线段数+拆点(类似的思想)
- javascript 小知识总结
- BZOJ-3226 校门外的区间 线段数+拆点(类似的思想)
- C#学习(8):类型约束