package Container;

import java.util.HashSet;
import java.util.Iterator; /* Set 元素是无序的(存入和取出的顺序不一定一致),元素不可以重复
|---HashSet:底层数据结构是哈希表
| HashSet是如何保证元素唯一性呢?
| 是通过两个方法来完成的 hashCode 和 equals来完成的
| 如果元素的hashCode值相同,才会判断 equals 是否为true
| 如果hashCode值不相同,不会调用 equals
|
| 注意:对于判断元素是否存在,以及删除等操作,依赖的方法是元素的
| hashCode和equals方法
| (arrayList判断元素是否存在只依赖于equals方法)
|---TreeSet:
Set 集合的功能和 Collection 是一致的 */ class Person
{
private String name;
private int age;
Person(String name,int age)
{
this.name = name;
this.age = age;
} public String getname()
{
return name;
} public int getage()
{
return age;
} // 重写 hashCode 方法
public int hashCode()
{
// return 1; 这种方法也能得到效果但会调用 equals 方法,并且 比较次数比较多 // 该种方法调用 String 的hashCode 方法,就不会调用 equals 方法,比较次数少
return name.hashCode()+age*39; // 保证 hashCode 值的唯一性
} public boolean equals(Object obj)
{
if (!(obj instanceof Person))
return false; Person person = (Person)obj;
return this.name.equals(person.name) && this.age == person.age;
}
} public class HashSetDemoTwo
{
public static void sop(Object obj)
{
System.out.println(obj);
} public static void main(String[] args)
{
HashSet<Person> hs = new HashSet<Person>(); hs.add(new Person("a1", 11));
hs.add(new Person("a2", 12));
hs.add(new Person("a3", 13));
hs.add(new Person("a4", 14));
hs.add(new Person("a5", 15));
hs.add(new Person("a3", 13)); System.out.println( hs.contains(new Person("a1", 11))); // 判断 a1 是否存在于集合中
sop("al:"+hs.contains(new Person("a1", 11))); // 将 a3 移除集合中
hs.remove(new Person("a3", 13)); // 遍历集合
Iterator<Person> it = hs.iterator();
while (it.hasNext())
{
Person person = (Person) it.next();
sop(person.getname()+"==="+person.getage());
}
}
}

  

Java 重写hashCode 方法和equals方法的更多相关文章

  1. 为什么要重写hashCode()方法和equals()方法及如何重写

    我想写的问题有三个: 1.首先我们为什么需要重写hashCode()方法和equals()方法 2.在什么情况下需要重写hashCode()方法和equals()方法 3.如何重写这两个方法 **** ...

  2. 为什么要重写hashcode方法和equals方法

    我们可能经常听到说重写equals方法必须重写hashcode方法,这是为什么呢?java中所有的类都是Object的子类,直接上object源码 /* * Copyright (c) 1994, 2 ...

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

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

  4. hashCode()方法和equals方法的重要性。

    在Object中有两个重要的方法:hashCode()和equals(Object obj)方法,并且当你按ctrl+alt+s时会有Generator hashCode()和equals().我们不 ...

  5. hashCode方法和equals方法比较

    为什么用HashCode比较比用equals方法比较要快呢?我们要想比较hashCode与equals的性能,得先了解HashCode是什么. HashCode HashCode是jdk根据对象的地址 ...

  6. Java连载56-toSting方法和equals方法

    一.关于object中的toString​方法: 1.SUN公司在Object类中设计toString方法的目的:返回java对象的字符串的表示形式. 2.在现实的开发过程中,Object里面的toS ...

  7. 【转】为什么要重写hashcode()方法和toString()方法

    Object 类 包含toString()和hashCode()方法. 一.toString(): 在Object类里面定义toString()方法的时候返回的对象的哈希code码,这个hashcod ...

  8. 集合hashCode()方法和equals()办法

    1.哈希码:         Object中的HashCode方法会返回该对象的的内存真实地址的整数化表示,这个形象的不是真正抵制的整数值就是哈希码. 2.利用哈希码向集合中插入数据的顺序?     ...

  9. java数组、java.lang.String、java.util.Arrays、java.lang.Object的toString()方法和equals()方法详解

    public class Test { public static void main(String[] args) { int[] a = {1, 2, 4, 6}; int[] b = a; in ...

随机推荐

  1. Java中的Runtime类

    Runtime类描述了虚拟机一些信息.该类采用了单例设计模式,可以通过静态方法 getRuntime()获取Runtime类实例.下面演示了获取虚拟机的内存信息: package Main; publ ...

  2. 设计模式笔记之一:MVP架构模式入门(转)

    写在前面:昨天晚上,公司请来专家讲解了下MVP,并要求今后各自负责的模块都要慢慢的转到MVP模式上来.以前由于能力有限,没有认真关注过设计模式.框架什么的,昨晚突然兴趣大发,故这两天空闲时间一直在学习 ...

  3. 解决word启动时报找不到mathpage.wll错误

    按下面的网址进行操作即可: http://www.mathtype.cn/wenti/word-jianrong.html

  4. Myeclipseforspring 10破解

    破解包和说明下载网址:http://ishare.iask.sina.com.cn/f/33848276.html?all=y

  5. CentOS标准目录结构

    原博:http://www.centoscn.com/CentOS/2014/0424/2861.html/ 最高层root --- 启动Linux时使用的一些核心文件.如操作系统内核.引导程序Gru ...

  6. eclipse中集成svn maven开发手册---maven编译打包

    使用eclipse中maven进行打包. 打好的包在相应的workspace下面会有一个release的文件夹,如图

  7. Java语言中IO流的操作规律学习笔记

    1,明确源和目的. 数据源:就是需要读取,可以使用两个体系:InputStream.Reader: 数据汇:就是需要写入,可以使用两个体系:OutputStream.Writer: 总结: 读:就是把 ...

  8. 最多两次股票交易-Best Time to Buy and Sell Stock III

    Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...

  9. PHP实现验证码图片

    <?php header("Content-type: image/png"); session_start(); $authnum = ''; $str = 'abcdef ...

  10. 前端MVVM框架:Knockout.JS(一)

    前言 在我们平时开发 Web 应用程序的时候,如果项目不算特别大的话,一般都是拿 jQuery 再配合一些前端 UI 框架就在项目上面应用了.如果页面逻辑稍微复杂的话,那个在写前端 JavaScrip ...