15郝斌(99-102)Collections的使用HashSet容器必须实现equals和hahsCode方法Iterator接口Map接口.doc

15郝斌(99-102)Collections的使用HashSet容器必须实现equals和hahsCode方法Iterator接口Map接口.doc

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
15郝斌(99-102)Collections的使用HashSet容器必须实现equals和hahsCode方法Iterator接口Map接口

99课:复习上节课内容。 100节课: 举例:HashSet使用必须实现equals()和HashsCode()方法 import java.util.*; class Student implements Comparable//学生类,要实现排序得用接口继承 { private int id;//学号 private String name;//姓名 public Student(int id, String name)//通过构造函数完成初始化 { this.id = id; this.name = name; } @Override public String toString()//通过toString返回信息 { return id + + name; //1000张三 //System.out.println(); } public boolean equals(Object ob)//如果取消equals( )方法也会出现重复 { Student st = (Student)ob; return st.id==this.id st.name==this.name; } public int hashCode()//如果取消hashCode()方法会出现重复 { return id * this.name.hashCode();// } public int compareTo(Object ob)// { Student st = (Student)ob;//把ob强制转换成Student类型。 return this.id-st.id;//排序标准。 } } public class TestSet// { public static void main(String[] args)// { Set S = new HashSet(); //TreeSet HashSet实现了Set容器的一个接口 S.add(new Student(1000, 张三));//下面用add()方法把对象放进去。 S.add(new Student(1003, 小娟)); S.add(new Student(1002, 王五)); S.add(new Student(1001, 李四));//以下重复了,因为set排序无顺序、不允许重复。 S.add(new Student(1001, 李四)); S.add(new Student(1001, 李四)); S.add(new Student(1001, 李四)); S.add(new Student(1001, 李四)); S.add(new Student(1001, 李四)); System.out.println(S); //[ }结果:无重复的输出。 } 举例:讲什么是hashCode()方法 String 和 Integer 这些Java自带的类都重写了hashCode方法,如果String 和 Integer new出来的 对象的内容是一样的,则这些对象的hashCode返回值也是一样的,虽然这些对象占用的是不同的内存 不过用户自定义类型则不同,如本程序的A类,即便是两个内容一模一样的A类对象,它们返回的 hashCode值也是不一样的,但是两个内容一模一样的Integer类对象或者String类对象返回的 hashCode值却是一样的,因为系统自带的String 和 Integer 类都已经重写了Object的hashCode方法嘛! 如果程序员希望自己定义的类对象,占用不同内存空间但内容却是一样的对象调用hashCode方法 返回值是一样的,则程序员就必须自己重写hashCode方法,如本程序的B类 class A { private int id; public A(int id) { this.id = id; } } class B { private int id; public B(int id) { this.id = id; } @Override public int hashCode() { return new Integer(id).hashCode(); } } public class TestHashCode_1{ public static void main(String[] args) { System.out.println(new A(1).hashCode() = + new A(1).hashCode(

文档评论(0)

haihang2017 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档