HashSet的特性

HashSet是Set接口的实现类,因此,HashSet中的元素也是不能重复的。HashCode判断元素重复的标准时,首先计算新添加元素的hashCode值,当不重复是,则直接加入到该集合中,若发生重复,也称发生了碰撞,则进一步调用equals判断元素是否在逻辑上相同。

 

 

package cn.cqu.huang;

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


class Person {
	private String name;
	private int age;

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

	public String toString(){
		return name+":"+age;
	}

	public boolean equals(Object obj){
		if(obj instanceof Person){
			Person p = (Person) obj;
			return name.equals(p.name) && age==p.age;
		}
		return false;
	}

	public int hashCode(){
		//比较挫的hashcode公式,对程序逻辑没有影响
		//return 100;

		//比较好的hashCode公式
		return name.hashCode()+age;
	}
}

public class HashCodeDemo {
	public static void main(String[] args) {
		Set<Person> set = new HashSet<Person>();
		set.add(new Person("zhang",20));
		set.add(new Person("zhang",30));
		set.add(new Person("zhang",20));

		set.add(new Person("Li",20));
		set.add(new Person("Li",20));

		System.out.println(set);
	}
}

HashSet的特性,布布扣,bubuko.com

时间: 2024-11-05 13:36:00

HashSet的特性的相关文章

HashSet的特性介绍

HashSet除了在元素的存储上是无序的以外,还是不能够存储重复的元素. HashSet如何判断元素是否重复呢?是根据元素继承的两个方法来判断,hashCode和equals,当存储元素时,首先判断要存入的元素和已存在的元素的哈希值是否相同,若不相同存入,若相同则利用equals判断两个元素是否相同,若不相同,则存入,若相同则放弃.而hashCode和equlas是在存入元素自动调用的. 一下继续利用Person类举例 import java.util.*; class Person { pri

Java集合类解析

Java中的集合类包含的内容很多而且很重要,很多数据的存储和处理(排序,去重,筛选等)都需要通过集合类来完成. 首先java中集合类主要有两大分支: (1)Collection (2)Map 先看它们的类图: (1)Collection (2)Map  可以看到它们之间的关系纷繁复杂,如果不系统的学习一下,还真是不知道有什么区别,该怎么选择.由于HashSet的内部实现原理是使用了HashMap,所以我们的学习路线为先学习Map集合类,然后再来学习Collection集合类. (1)HashMa

Java学习笔记(Javase毕向东版视频)六 常用API对象二

1.基本数据类型对象包装类:见下图 1 public class Test { 2 public static void main(String[] args){ 3 Demo(); 4 toStringDemo(); 5 jdkDemo(); 6 } 7 8 private static void jdkDemo() { 9 //注意:在1.5之后的版本中可以使用下面的形式 简化书写 ,这是版本升级的一个方面 10 Integer i=3; //自动装箱,jdk是Integer i = Int

Set,List

Set是Collection的子接口,用来包含一组无序无重复的对象. 无序:是指元素存入的顺序和内存的存储顺序不同. 无重复:两个对象e1和e2,如果e1.equals(e2)返回true,则认为e1与e2是重复的. Set有两种主要的集合实现类: HashSet:HashSet的特性在于其内部对象的散列存取,即采用哈希技术. TreeSet:TreeSet存入的顺序跟存储的顺序不同,但是存储是按照排序存储的. List接口是Collection接口的子接口,用来包含一组有序有重复的对象,Lis

[LeetCod] Single Number

Given an array of integers, every element appears twice except for one. Find that single one. Note:Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory? 看到这种题第一个想法就是hashset啊哈哈哈. 根据hashset的特性,如果hash

首先java中集合类主要有两大分支

本文仅分析部分原理和集合类的特点,不分析源码,旨在对java的集合类有一个整体的认识,理解各个不同类的关联和区别,让大家在不同的环境下学会选择不同的类来处理. Java中的集合类包含的内容很多而且很重要,很多数据的存储和处理(排序,去重,筛选等)都需要通过集合类来完成. 首先java中集合类主要有两大分支: (1)Collection (2)Map 先看它们的类图: (1)Collection Collection (2)Map Map 可以看到它们之间的关系纷繁复杂,如果不系统的学习一下,还真

Collection-&gt;Set-&gt;HashSet、TreeSet实现原理

Collection下面除了一个常用的List接口,还有另外一个容器接口Set,不过Set目前本人使用的不多,但作为知识梳理还是要进行了解. 环境:JDK8 一.实现原理 1.HashSet内存存储原理 HashSet类的成员变量以及构造函数 static final long serialVersionUID = -5024744406713321676L; private transient HashMap<E,Object> map; private static final Objec

jee第八周作业

介绍一. hashCode()方法和equal()方法的作用其实一样,在Java里都是用来对比两个对象是否相等一致,那么equal()既然已经能实现对比的功能了,为什么还要hashCode()呢? 因为重写的equal()里一般比较的比较全面比较复杂,这样效率就比较低,而利用hashCode()进行对比,则只要生成一个hash值进行比较就可以了,效率很高,那么hashCode()既然效率这么高为什么还要equal()呢? 因为hashCode()并不是完全可靠,有时候不同的对象他们生成的hash

hashcode()和equals()的作用、区别、联系

    介绍一. hashCode()方法和equal()方法的作用其实一样,在Java里都是用来对比两个对象是否相等一致,那么equal()既然已经能实现对比的功能了,为什么还要hashCode()呢? 因为重写的equal()里一般比较的比较全面比较复杂,这样效率就比较低,而利用hashCode()进行对比,则只要生成一个hash值进行比较就可以了,效率很高,那么hashCode()既然效率这么高为什么还要equal()呢? 因为hashCode()并不是完全可靠,有时候不同的对象他们生成的