题目:在HashSet集合中添加Person对象,把姓名相同的人当作同一个人,禁止重复添加。

分析:1.定义一个Person类,定义name和age属性,并重写hashCode()和equals()方法,针对Person类的name属性进行比较。

代码:

  1. import java.util.HashSet;
  2. import java.util.Iterator;
  3. import java.util.Set;
  4.  
  5. public class Test70602 {
  6.  
  7. public static void main(String[] args) {
  8. Person p1 = new Person("haha", 23);
  9. Person p2 = new Person("gege", 24);
  10. Person p3 = new Person("gege", 25);
  11. Set<Person> set = new HashSet<Person>();
  12. set.add(p1);
  13. set.add(p2);
  14. set.add(p3);
  15. System.out.println(set.size());
  16. Iterator<Person> iterator = set.iterator();
  17. while (iterator.hasNext()) {
  18. Person person = (Person) iterator.next();
  19. System.out.println(person.getName() + ":" + person.getAge());
  20. }
  21.  
  22. }
  23.  
  24. }
  25.  
  26. class Person {
  27.  
  28. private String name;
  29. private int age;
  30.  
  31. public Person(String name, int age) {
  32. this.name = name;
  33. this.age = age;
  34. }
  35.  
  36. public void setName(String name) {
  37. this.name = name;
  38. }
  39.  
  40. public String getName() {
  41. return name;
  42. }
  43.  
  44. public void setAge(int age) {
  45. this.age = age;
  46. }
  47.  
  48. public int getAge() {
  49. return age;
  50. }
  51.  
  52. // 实现hashCode()方法,返回待比较内容的hashCode。
  53. public int hashCode() {
  54. return name.hashCode();
  55. }
  56.  
  57. // 实现equals()方法,返回一个布尔值。
  58. public boolean equals(Object obj) {
  59. if (this == obj) { // 判断是否是同一个对象,是的话,返回True
  60. return true;
  61. }
  62. if (!(obj instanceof Person)) { // 判断对象是否是Person类型,如果对象不是,返回false
  63. return false;
  64. }
  65.  
  66. Person p = (Person) obj; // 将对象强转为Person类型
  67. boolean b = this.name.equals(p.name); // 判断name是否相同
  68. return b; // 返回判断结果
  69.  
  70. }
  71.  
  72. }

最关键的就是hashCode()和equals()方法的实现。

Java之hashSet实现引用类型的禁止重复功能的更多相关文章

  1. C++中的set和java的hashset有何区别?

    以前对C++的STL容器烂熟于心,两年没碰过C++了,现在已经很生疏了.工作原因转战java,对java的容器不甚了解,特别是每看到一种容器,不由自主地拿起和C++对比.C++中的set和java的h ...

  2. java.util.HashSet, java.util.LinkedHashMap, java.util.IdentityHashMap 源码阅读 (JDK 1.8)

    一.java.util.HashSet 1.1 HashSet集成结构 1.2 java.util.HashSet属性 private transient HashMap<E,Object> ...

  3. 【java】HashSet

    package com.tn.hashSet; public class Person { private int id; private String name; private String bi ...

  4. java.util.HashSet, java.util.LinkedHashMap, java.util.IdentityHashMap 源码阅读 (JDK 1.8.0_111)

    一.java.util.HashSet 1.1 HashSet集成结构 1.2 java.util.HashSet属性 private transient HashMap<E,Object> ...

  5. Java集合 -- HashSet 和 HashMap

    HashSet 集合 HashMap 集合 HashSet集合 1.1 Set 接口的特点 Set体系的集合: A:存入集合的顺序和取出集合的顺序不一致 B:没有索引 C:存入集合的元素没有重复 1. ...

  6. (java/javascript) list 交集 并集 差集 去重复并集

    java list 交集 并集 差集 去重复并集 package com; import java.util.ArrayList; import java.util.Iterator; import ...

  7. java 集合 HashSet 实现随机双色球 HashSet addAll() 实现去重后合并 HashSet对象去重 复写 HashCode()方法和equals方法 ArrayList去重

    package com.swift.lianxi; import java.util.HashSet; import java.util.Random; /*训练知识点:HashSet 训练描述 双色 ...

  8. Java中如何去除List中的重复的值?

    package com.test; import java.util.*; public class Test { /** AAAA AAAA BBBB BBBB CCCC CCCC CCCC CCC ...

  9. Java 之 HashSet 集合

    一.概述 java.util.HashSet  是 Set 接口的一个实现类,它所存储的元素是不可重复的,并且元素都是无序的(即存取顺序不一致). java.util.HashSet 底层的实现是一个 ...

随机推荐

  1. 【转】winform带参数启动另一个exe

     启动EXE string arg1 = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; string arg2 = "bbbbbbbbbbbbbbbb ...

  2. log4net基本日志使用笔记[windows application]

    Ref: http://www.cnblogs.com/wangsaiming/archive/2013/01/11/2856253.html http://www.cnblogs.com/zhouf ...

  3. c# 海康威视 Winform播放mp4视频

    最近有个视频播放系统,需要对海康的mp4格式视频进行播放,由于普通播放器无法对该视频进行播放原因是海康对视频进行了自己的编码,需要相应的解码才可以对视频进行播放. 下面是对海康威视视频播放的c#代码( ...

  4. Sublime字体设置

    {"font_face": "Courier New","font_options":["subpixel_antialias&q ...

  5. vb6-很简单的配置密码验证提示

    '很简单的配置密码验证提示 Dim add As String add = Trim(InputBox("请输入配置密码", "报表配置")) If add = ...

  6. iOS 基础 第三天(0807)

    0807 成员变量作用域###### 如下图所示: 这里要注意手写的成员变量/实例变量默认的作用域是private,所以外部指针类型的对象无法直接访问,这起到一定的保护作用.但可以在当前类内部@imp ...

  7. mybatis的parameterType使用map实现真正的sql随意写

    在dao层给map赋值 纠正一下应该把dd作为传入而不是sbiId; sqlMap中的parameterType="java.util.Map", 就 OK package com ...

  8. drupal CMS

    http://drupalchina.cn/ https://www.drupal.org

  9. hive-site.xml 参数设置

    <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="confi ...

  10. 解决服务器断电导致mysql数据库无法启动

    1.找到mysql数据库目录下的*.ini这个配置文件2.复制配置文件到桌面,当作备份3.打开配置文件,在配置文件里加上innodb_force_recovery=6这句,保存,然后重启服务器4重启完 ...