HashTest以及对象唯一性(一)

package cn.cp;
//尽管我们在Person类里写了equals方法,但是还是存入了两个name=liming,age=12的对象
//这是为什么呢????????
//因为HashSet在往里面存对象的时候,它存的是Hash值。
//虽然建立的两个name=liming,age=12但是他们的hash值不一样,所以当做了不同的对象。
//注意:
//(1)Java里一个hash值下可能有多个对象。
//(2)在HashSet中在比较是否是同一个对象时,先比较的hash值,若hash值不一样那么二者肯定不是同一元素。
//(3)hash值一样,再比较两个对象,若对象还一样则说明这是同一个东西,于是不再存入
//所以,我们这么做根本没有用
//这也就是我们常说的:一般来说重写equals()的同时总是要重写hashCode()方法
import java.util.HashSet;
import java.util.Iterator;
class Boy1 {
	private int age;
	private String name;

	public Boy1(int age, String name) {
		super();
		this.age = age;
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public String getName() {
		return name;
	}

	@Override
	public boolean equals(Object obj) {
		Boy1 b=(Boy1) obj;
		boolean result=this.age==b.age&&this.name.equals(b.name);
		return result;
	}

	@Override
	public String toString() {
		return "boy1 [age=" + age + ", name=" + name + "]";
	}

}

public class HashSetTest1 {
	public static void main(String[] args) {
      Boy1 boy1=new Boy1(12, "liming");
      Boy1 boy2=new Boy1(13, "liming");
      Boy1 boy3=new Boy1(12, "liming");
      HashSet hashSet=new HashSet();
      hashSet.add(boy1);
      hashSet.add(boy2);
      hashSet.add(boy3);
      Iterator iterator=hashSet.iterator();
      while(iterator.hasNext()){
      	System.out.println(iterator.next());
      }
	}
}
时间: 2024-10-02 06:53:34

HashTest以及对象唯一性(一)的相关文章

HashTest以及对象唯一性(三)

package cn.cp; //当然可以自动生成代码equals()和hashCode()方法,来确保对象的唯一性. //这样的话存入HashTest的对象就保证了唯一性 import java.util.HashSet; import java.util.Iterator; class Boy3 { private int age; private String name; public Boy3(int age, String name) { super(); this.age = age

HashTest以及对象唯一性(二)

package cn.cp; //在HashSetTest1的基础上重写hashCode()和equals()方法,来确保对象唯一性 import java.util.HashSet; import java.util.Iterator; class Boy2 { private int age; private String name; public Boy2(int age, String name) { super(); this.age = age; this.name = name;

如何在保留装箱对象的前提下修改值

有人问如何在保留装箱对象的前提下修改值?   场景: object obj = 100; Console.WriteLine("original object value: " + obj.ToString()); // when debug, make obj's ID: 1# //TODO: modify obj value here (to 1000, for example), but preserve obj object Console.WriteLine("mo

C#箴言:用静态构造函数初始化静态成员

函数|静态 编写程序的时候难免要使用到静态成员,由于静态成员的访问是脱离类型对象的,所以使用非静态构造函数,私有方法或者一些其他方法都是不合理的..Net提供了成员初始化语句和静态构造函数来初始化静态成员. 根据上一个单元,我们可以知道静态成员的初始化语句会早于静态构造函数执行,其次还知道成员初始化语句的好处和一些限制.这里要提的一点就是,静态构造函数和实例构造函数之间的区别,因为静态构造函数是由CLR调用执行的,所以静态构造函数只能是一个,同时不能还有参数.那么静态构造函数相对于成员初始化的一

编写图片空间QTP脚本时的一点经验

我录制QTP脚本的思路是让能跑起来的都跑起来,不能跑起来的暂时不管,同时先采取固化脚本的思路写脚本(详细),完成后再加入参数化,让脚本灵活起来!呵呵! 以下是我编写图片空间时的一点经验! 经验1:用FireEvent方法处理TOP菜单中弹出的子菜单 Browser("淘宝网-店铺管理平台").Page("淘宝网-店铺管理平台").Link("素材管理(1)").Click Browser("淘宝网-店铺管理平台").Page(

深入解析HTML5中的IndexedDB索引数据库

  介绍 IndexedDB是HTML5 WEB数据库,允许HTML5 WEB应用在用户浏览器端存储数据.对于应用来说IndexedDB非常强大.有用,可以在客户端的chrome,IE,Firefox等WEB浏览器中存储大量数据,下面简单介绍一下IndexedDB的基本概念. 什么是IndexedDB IndexedDB,HTML5新的数据存储,可以在客户端存储.操作数据,可以使应用加载地更快,更好地响应.它不同于关系型数据库,拥有数据表.记录.它影响着我们设计和创建应用程序的方式.Indexe

Python_基础知识储备

前言 前面的博文从记录了如何Setup Python开发环境,到IPython的基本使用.现在便由浅入深的学习Python编程艺术.学习一门编程语言,首先要了解其底层的实现机制和程序处理的过程,也就是了解其设计思想和解析实现.当然,初始一门语言,可以无须太过深入的去研究这些,但也要在心中建立起一个Python的知识框架,在接下来的学习过程中,不断的其填充和完善这一框架,有如造房筑楼. 初识Python Python 支持OOP(Object Oriented Programming面向对象编程实

设计模式 - 备忘录

设计模式 - 备忘录 备忘录模式很简单,就是存储对象,然后支持恢复对象到之前的某个状态,玩过游戏的,一定懂得存档一说,备忘录就是对对象的存档与管理. 效果: 这个需要配合FastCoder使用,请自行到Github上去搜索源码FastCoder源码^_^! 源码: Model.h 与 Model.m // // Model.h // MementoPattern // // Created by YouXianMing on 15/1/3. // Copyright (c) 2015年 YouX

Python OOP知识积累

前言 Python是一个功能非常强大的编程语言.玩法很多.但是在我们享受Python带来的编程乐趣之前,我们必须要掌握OOP编程技能,这样才能够更好的应用Python高级功能.OOP我曾经在<Python_基础知识储备>中提到过,这次我们再全面而详细的回炉一次. 对象 在计算机领域中,对象是人们要进行研究的任何事物,它表示具体的事物,此外也表示抽象的规则.计划或事件.对象是数据和操作数据的方法的结合. 对象的状态(数据):一个对象用数据值来描述它的状态,也称为对象属性. 对象的行为(操作):对