文档章节

HashSet详解

小和尚敲代码
 小和尚敲代码
发布于 2016/04/22 14:21
字数 441
阅读 68
收藏 3

    HashSet中不能存放相同的元素这点大家都知道,对于仅存放基本类型的Set集合不会有很大困难理解,但是当Set中存放的是对象引用时,就得去重写该对象的hashCode和equals方法了,并且Set集合就是依据这两个方法来判断存入引用的一致性。

import java.util.HashSet;

public class HashSetTest {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        HashSet<Name> set = new HashSet<Name>();
        set.add(new Name("abc", "123"));
        set.add(new Name("abc", "456"));
        // 由运行结果可以得知,由于重写的hashCode和equals方法是依据first来判断对象是否相等
        //所以即使添加的两个变量last不同也不能添加进set中
        System.out.println(set);
    }

}

class Name {
    private String first;
    private String last;

    public Name(String first, String last) {
        this.first = first;
        this.last = last;
    }

    // 重写Name类的equals方法,依据first实例变量判断
    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (o == null) {
            return false;
        }
        if (o.getClass() != getClass()) {
            return false;
        }

        Name other = (Name) o;
        return first.equals(other.first);

    }

    // 重写Name类的hashCode方法,依据first实例变量判断
    @Override
    public int hashCode() {
        // TODO Auto-generated method stub
        return first.hashCode();
    }

    @Override
    public String toString() {
        return "Name [first=" + first + ", last=" + last + "]";
    }

}

   由此可知,当试图把某个类的对象当成HashCode的Key,或者试图将这个类的对象放入HashSet中保存时,重写这个类的equals(Object obj)方法和hashCode()方法很重要,并且这两个方法的返回值必须一致。当该类的两个hashCode()返回值相同时,他们通过equals方法比较也应该保持一致。通常来说,所有参与计算hashCode()返回值的关键属性,都应该用于作为equals()比较的标准。

© 著作权归作者所有

小和尚敲代码
粉丝 24
博文 86
码字总数 28687
作品 0
南昌
程序员
私信 提问
Java 集合学习 之 Set 集合详解

关于Set集合的特点以及与List ,Map, Queue 三种集合的区别 请查看(Java 集合学习总结) Set集合特点: 无序不可重复 ("123", 123 可以同时存在,因为不同的数据类型) 1、HashSet类HashSet 是...

石头记
2016/06/28
47
0
java的Set接口详解

set接口是继承于collection接口,是collection的一个分支. 一.hashSet 1.hashSet是可以用来去除集合中的重复的元素 代码举例: HashSet 结果为: 2.LinkedHashSet是hashSet的子类,特点是去重 有...

zxc1258012580的博客
2017/12/21
0
0
Java集合详解7:HashSet,TreeSet与LinkedHashSet

Java集合详解7:HashSet,TreeSet与LinkedHashSet Harries Blog™2018-05-121 阅读 JavaAppequalsCollectioncatAPI...

Harries Blog™
2018/05/12
0
0
【Java入门提高篇】Day29 Java容器类详解(十一)LinkedHashSet详解

  当当当当当当当,本来打算出去浪来着,想想还是把这个先一起写完吧,毕竟这篇的主角跟我一样是一个超级偷懒的角色——LinkedHashSet,有多偷懒?看完你就知道了。   本篇将从以下几个方...

弗兰克的猫
2018/08/11
0
0
一份关于 Java、Kotlin 与 Android 的学习笔记

JavaKotlinAndroidLearn 这是一份关于 Java 、Kotlin 、Android 的学习笔记,既包含对基础知识点的介绍,也包含对一些重要知识点的源码解析,笔记的大纲如下所示: Java 重拾Java(0)-基础知...

叶应是叶
2018/08/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Boot + Mybatis-Plus 集成与使用(二)

前言: 本章节介绍MyBatis-Puls的CRUD使用。在开始之前,先简单讲解下上章节关于Spring Boot是如何自动配置MyBatis-Plus。 一、自动配置 当Spring Boot应用从主方法main()启动后,首先加载S...

伴学编程
昨天
7
0
用最通俗的方法讲spring [一] ──── AOP

@[TOC](用最通俗的方法讲spring [一] ──── AOP) 写这个系列的目的(可以跳过不看) 自己写这个系列的目的,是因为自己是个比较笨的人,我曾一度怀疑自己的智商不适合干编程这个行业.因为在我...

小贼贼子
昨天
7
0
Flutter系列之在 macOS 上安装和配置 Flutter 开发环境

本文为Flutter开发环境在macOS下安装全过程: 一、系统配置要求 想要安装并运行 Flutter,你的开发环境需要最低满足以下要求: 操作系统:macOS(64位) 磁盘空间:700 MB(不包含 IDE 或其余...

過愙
昨天
6
0
OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
昨天
2.7K
16
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
昨天
42
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部