关闭

HashSet

标签: JAVAhashcode
216人阅读 评论(0) 收藏 举报
分类:

Set集合:不允许重复元素。和collection的方法相同。Set集合取出的方法只有一个:迭代器


HashSet:不保证顺序,哈希表(散列表)结构
1.不允许存储重复元素,因为会发生查找的不确定性
2.不保证存入和取出的顺序一致


如何保证唯一性?
元素必须覆盖hashCodeequals方法
覆盖hashCode方法是为了根据元素自身的特点确定哈希值。
覆盖equals方法是为了解决哈希值的冲突


当哈希算法算出的两个元素的值相同时,称为哈希冲突。

冲突后,如果两元素不同,则会根据地址链接法(拉链法)继续算位置
冲突后,需要对元素进行进一步的判断,判断的是元素的内容(equals)

哈希表在判断元素是否相同,依据hashCode方法,如果哈希值重复(哈希值相同)
再判断元素的equals方法,如果equals返回true,不存;返回false,存储!


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

public class HashSetTest {

	public static void main(String[] args) {
		//创建hashSet容器
		Set set = new HashSet();
		
		//往容器里面添加自定义元素
		set.add(new Student("xiaoqiang",15));
		set.add(new Student("wangcai",21));
		set.add(new Student("xiaoming",26));
		set.add(new Student("xiaoming",26));
		set.add(new Student("daniu",21));
		set.add(new Student("dani",21));
		
		
		//从hashSet集合里面取出自定义元素
		for (Iterator it = set.iterator(); it.hasNext();) {
			Student stu = (Student) it.next();
			System.out.println(stu.getName()+"--"+stu.getAge());
			
		}
	}

}

//创建Student类
class Student{
	private String name;
	private int age;
	public Student() {
		super();
	}
	public Student(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return "NewPeople [name=" + name + ", age=" + age + "]";
	}
	
	//覆盖hashCode方法
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + age;
		return result;
	}
	
	//覆盖equals方法
	@Override
	public boolean equals(Object obj) {
		System.out.println(this+"--compare--"+obj);
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Student other = (Student) obj;
			if(!name.equals(other.name)){
				return false;
			}
		
		return true;
	}
}


0
0
查看评论

HashSet 实例

package com.zyf.day24; import java.util.HashSet; import java.util.Iterator; class Book{ String name; double price; public Book(String name,dou...
  • china_demon
  • china_demon
  • 2017-01-03 06:39
  • 513

HashSet/HashMap在并发下的奇怪行为

最近服务器 一直不太正常,经常cpu占到200%,load到2,随时都有可能报警  通过 top -H -p xx看到 PID USER      PR  NI  VIRT  RES  SH...
  • pwlazy
  • pwlazy
  • 2009-12-14 19:47
  • 2295

Java 容器之Hashset 详解.

在之前的博文中本屌已经介绍过java的Co
  • nvd11
  • nvd11
  • 2014-05-31 18:26
  • 2501

java集合——HashSet的用法

java集合——HashSet的用法 一、HashSet的构造 HashSet hashset=new HashSet(); 二、HashSet添加元素 //向hashset中添加一个字符串 hashset.add("abc"); //向hashset...
  • tingzhiyi
  • tingzhiyi
  • 2016-08-08 16:28
  • 10181

Java的HashSet的对象遍历

import java.util.Set; import java.util.HashSet; import java.util.Iterator; public class SetTest { public static void main(String[] args) { Set set...
  • u011402596
  • u011402596
  • 2014-08-12 23:03
  • 7442

java set hashset 详解 用法~~~

Set集合里多个对象之间没有明显的顺序。具体详细方法请参考API文档(可见身边随时带上API文档有多重要),基本与Collection方法相同。只是行为不同(Set不允许包含重复元素)。 AD:2013大数据全球技术峰会低价抢票中 1、Set接口的使用 Se...
  • Shb_derek
  • Shb_derek
  • 2013-03-28 08:58
  • 10940

HashSet的内容如何排序

 方法一:把HashSet保存在ArrayList里,再用Collections.sort()方法比較private void doSort(){ final HashSet va = new HashSet(); va.add(2007111315); ...
  • foart
  • foart
  • 2009-06-12 14:00
  • 41910

C# HashSet 用法、Hashtable用法

HashSet 用法 .NET 3.5在System.Collections.Generic命名空间中包含一个新的集合类:HashSet。这个集合类包含不重复项的无序列表。这种集合称为“集(set)”。集是一个保留字,所以该类有另一个名称HashSet。这个名称很容易理解,因为这个集合基于散列值,...
  • ze_lin_huang
  • ze_lin_huang
  • 2013-01-13 21:26
  • 5580

C# HashSet集合类型使用介绍

C#的HashSet很少被使用的集合类型的一些被常用到的方法。
  • Scalzdp
  • Scalzdp
  • 2014-05-28 17:00
  • 17348

java中的HashSet和TreeSet的区别,以及HashSet导致的内存泄漏详解

Set集合中的元素是无序的,不可重复的。这个接口下有两个常用集合的实现,HashSet和TreeSet。 HashSet HashSet底层用的是哈希表,它把对象根据其哈希值存放到对应的区域里。由于这种特性,两个在不同区域的对象会被认为不相同的。 所以如果对象要存放到Hash集合里面,则需...
  • xingjiyuan26
  • xingjiyuan26
  • 2015-10-30 17:43
  • 7941
    个人资料
    • 访问:71722次
    • 积分:1655
    • 等级:
    • 排名:千里之外
    • 原创:109篇
    • 转载:5篇
    • 译文:0篇
    • 评论:2条
    我的Stackoverflow
    博客专栏
    文章分类
    最新评论