`
shoushounihao
  • 浏览: 41345 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Set集合中hashcode哈希理解

    博客分类:
  • java
 
阅读更多

package com.itcast.set;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;


/**
 *
 * Set:元素不可以重复,是无序。
 Set接口中的方法和Collection一致。
 |--HashSet: 内部数据结构是哈希表 ,是不同步的。
  如何保证该集合的元素唯一性呢?
  是通过对象的hashCode和equals方法来完成对象唯一性的。
  如果对象的hashCode值不同,那么不用判断equals方法,就直接存储到哈希表中。
  如果对象的hashCode值相同,那么要再次判断对象的equals方法是否为true。
  如果为true,视为相同元素,不存。如果为false,那么视为不同元素,就进行存储。
  
  记住:如果元素要存储到HashSet集合中,必须覆盖hashCode方法和equals方法。
  一般情况下,如果定义的类会产生很多对象,比如人,学生,书,通常都需要覆盖equals,hashCode方法。
  建立对象判断是否相同的依据。

 *
 */

public class HashDemo1 {

 
 
 public static void main(String args[])
 {
  Set set=new HashSet();
  set.add(new StudentBean(12, "list1"));
  set.add(new StudentBean(13, "list2"));
  set.add(new StudentBean(14, "list3"));
  set.add(new StudentBean(12, "list1"));
  Iterator it=set.iterator();
  while(it.hasNext())
  {
   StudentBean stu=(StudentBean)it.next();
   System.out.println(stu.getName()+"age"+stu.getAge());
  }
 }
}

 

 

package com.itcast.set;

public class StudentBean {

 private int age;
 private String name;
 public int getAge() {
  return age;
 }
 public void setAge(int age) {
  this.age = age;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public StudentBean(int age, String name) {
  super();
  this.age = age;
  this.name = name;
 }
 public StudentBean() {
  super();
 }
 @Override
 public boolean equals(Object obj) {
  
  if(this==obj)
  {
   return true;
  }
  if(!(obj instanceof StudentBean) )
  {
   throw new ClassCastException("类型不对");
  }
  
  StudentBean stu=(StudentBean)obj;
  return this.name.equals(stu.getName())&&this.age==stu.age;
 }
 @Override
 public int hashCode() {
  
  return name.hashCode()+this.age*37;
 }
 @Override
 public String toString() {
  
  return this.name+":"+this.age;
 }
 
 
}

 

 

 

 

package com.itcast.set;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class ListDemo1 {
 /*
  * 定义功能去除ArrayList中的重复元素。
  */
 /**
  * @param args
  */
 public static void main(String[] args) {

  List list=new ArrayList();
  list.add("abc");
  list.add("abc2");
  list.add("abc2");
  getSingleList(list);
  
  List list2=new ArrayList();
  list2.add(new StudentBean(12, "aa"));
  list2.add(new StudentBean(13, "aa2"));
  list2.add(new StudentBean(12, "aa"));
  getSingleList(list2);
 }

 private static void getSingleList(List list) {
  // TODO Auto-generated method stub
  ArrayList temp=new ArrayList();
  Iterator it=list.iterator();
  while(it.hasNext())
  {
   Object obj=it.next();
   if(!temp.contains(obj))
   {
    temp.add(obj);
   }
  }
  System.out.println(temp);
 }

}

 

分享到:
评论

相关推荐

    set接口经常用的hashCode和equals方法详解

    在`Set`接口中,特别是对于基于哈希表的实现(如`HashSet`),`hashCode`方法的作用尤为重要: - **定位元素**: 当向`HashSet`添加元素时,会首先调用该元素的`hashCode`方法,计算出其哈希码。哈希码被用来确定该...

    java集合知识-map、set等

    记住:如果元素要存储到HashSet集合中,必须覆盖hashCode方法和equals方法。 一般情况下,如果自定义的类会产生很多对象,比如人,学生,书,通常都需要覆盖equals,hashCode方法。 建立对象判断是否相同的依据。...

    hashCode的作用

    为了更好地理解`hashCode`的作用及其在实际开发中的重要性,我们可以从以下几个方面进行深入探讨: #### 1. 基本概念 `hashCode`方法是`java.lang.Object`类中的一个方法,所有Java类都继承自`Object`类,因此每个...

    Java中的Set集合简单汇总解析

    Java中的Set集合简单汇总解析 Set接口简介: Set接口是Java集合框架中的一个重要接口,它继承自Collection接口,并没有对Collection接口进行功能上的扩充。Set接口的主要特点是元素无序,并且都会以某种规则保证...

    CustomSet.zip

    9. ** equals() 和 hashCode()**:为了与其他集合比较,CustomSet需要重写equals()和hashCode()方法,确保集合间的相等性和哈希码的一致性。 自定义实现HashSet时,开发者需要特别关注性能和内存使用,确保在满足...

    day06-集合1

    1. **Set集合概述和特点**: `Set`接口继承自`Collection`接口,它不保证集合中元素的顺序,不允许有重复元素。在Java中,常见的`Set`实现类有`HashSet`、`TreeSet`等。`Set`集合的特性包括: - 存储元素无序:`...

    集合概述set、List、Map

    ### 集合概述:set、List、Map #### 一、集合框架概述 ##### 1.1.1 容器简介 在Java编程中,集合框架是一个非常重要的概念,它提供了一种灵活的方式来存储、操作和管理不同类型的对象集合。集合框架的主要目标是...

    浅析Java中的set集合类型及其接口的用法

    Java中的Set集合是一种特殊的集合类型,它遵循了不存储重复元素的基本原则。Set接口是Collection接口的子接口,它的设计目标是确保集合中每个元素的唯一性。在Java中,Set接口有两个常用的实现类:HashSet和TreeSet...

    Java集合Collection、List、Set、Map使用详解

    ### Java集合Collection、List、Set、Map使用详解 #### 1. 集合框架概述 集合框架是Java编程语言中最基本且最重要的组成部分之一。...理解这些集合的特点可以帮助开发者更好地选择合适的容器来满足应用程序的需求。

    hashcode和equals的分析

    ### hashCode和equals方法详解 ...通过以上分析,我们可以看到`hashCode`和`equals`方法在Java中扮演着非常重要的角色,尤其是在集合框架中。正确地实现这两个方法可以大大提高程序的性能和可维护性。

    JAVA集合(List,Set,Map)

    本篇文章将深入探讨集合框架中的三大核心组件:`List`、`Set`以及`Map`,并通过具体的接口和类来分析它们的特点和应用场景。 #### 集合接口 在Java集合框架中,主要有以下几种关键接口: - **`Collection`接口**:...

    实验05 Java集合.doc

    在本次实验中,我们主要关注了三个主要的集合接口:Set、List和Map,以及它们的一些常见实现类。 1. **Set接口**:Set接口代表了一个不允许有重复元素的集合。实验中提到了两个主要的实现类:HashSet和TreeSet。...

    java集合详解.pdf

    Java 集合详解 Java 集合框架是 Java ...在 Map 中,hashCode() 方法用于生成键的哈希码,以便快速地定位键值对。 Java 集合框架是 Java 语言中非常重要的一部分,掌握集合框架可以让开发者更好地进行 Java 编程。

    第8天(集合【LinkedList、HashSet、Collection集合体系】)v201703103

    **判断集合元素唯一性原理**\n 在Set集合中,元素的唯一性是通过`hashCode()`和`equals()`方法来保证的。每个对象都有一个独特的哈希码,当尝试添加一个元素时,Set会首先检查这个元素的哈希码是否已存在于集合中。...

    离散数学作业 JAVA实现集合及其运算

    - **equals()**和`hashCode()`:比较两个集合是否相等,以及计算哈希值。 通过这个离散数学作业,你可以深入理解`HashSet`的特性和操作,同时锻炼了使用集合框架解决问题的能力。实践这些基本操作有助于提高编程...

    java集合分类总结.doc

    Set集合是一种无序集合,不允许存放重复的元素。Set集合的主要实现类有HashSet等。HashSet是哈希表实现的,equals返回true,hashCode返回相同的整数。SortedSet是Set的子接口,对Set排序实现类是TreeSet,使用二叉树...

    集合的概念及应用和HashSet保证数据不重复的原理

    在Java中,集合框架是由`java.util`包中的类和接口组成的,提供了多种类型的集合,包括列表(List)、队列(Queue)、集(Set)等。今天我们将深入探讨“集合”的概念及其应用,以及HashSet如何保证数据不重复的原理...

    对Java中Set的深入研究.pdf

    Java中的Set接口是基于集合概念实现的,它不包含重复元素。Set接口继承自Collection接口,并且不保证集合中元素的顺序,某些Set实现可能会按照插入顺序或特定规则排序。以下是对Java Set实现的一些深入讨论: 1. **...

Global site tag (gtag.js) - Google Analytics