Chinaunix首页 | 论坛 | 博客
  • 博客访问: 156296
  • 博文数量: 44
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 407
  • 用 户 组: 普通用户
  • 注册时间: 2015-11-10 13:28
个人简介

仰望星空

文章分类
文章存档

2016年(22)

2015年(22)

我的朋友

分类: Java

2016-04-20 22:26:39

一、什么是HashSet

HashSet实现了Set接口,在他的集合中不允许有重复的对象,想要存储对象到HashSet之前必须覆写equals()和hashCode()接口,否则无法实现比较两个对象是否相等,以及是否重复了。HashSet()使用public boolean add(Object o)的方法在Set中添加元素,当对象重复时会返回一个false。

二、什么是HashMap

HashMap实现了Map接口,Map接口对key和value进行映射,Map中不存在重复的key,Map接口有两个基本实现TreeMap和HashMap 其中TreeMap的实现对象保存时的次序,HashMap不能。HashMap是非synchronized,但Collection架构提供方法保证HashMap的Synchronized,当多线程访问HashMap时,只有一个线程能更改Map。

下面是HashSet的代码,其覆写了hashCode()和equals()方法,如果不覆写任意其中一个,那么相同的对象会有不同的hash值,也就是说HashSet中将会有重复的对象了。

package HashTest;

import java.util.HashSet;  
import java.util.Iterator;  
class Boy2 {  
    private int age;  
    private String name;  
  
    public Boy2(int age, String name) {  
        super();  
        this.age = age;  
        this.name = name;  
    }  
  
    public int getAge() {  
        return age;  
    }  
  
    public String getName() {  
        return name;  
    }  
 
    public int hashCode(){
    	return this.name.hashCode()+age;
    }
  
    /*public boolean equals(Object obj) {  
        Boy2 b=(Boy2) obj;  
        boolean result=this.age==b.age&&this.name.equals(b.name);  
        return result;  
    } */ 
//屏蔽上面的equals()或者hashCode()方法将会使对象重复
  
    @Override  
    public String toString() {  
        return "boy3 [age=" + age + ", name=" + name + "]";  
    }  
  
}  

public class HashTest1 {
	public static void main(String args[]){
		Boy2 b1 = new Boy2(43, "zhangsan");
		Boy2 b2 = new Boy2(33, "lisi");
		Boy2 b3 = new Boy2(55, "wangwu");
		Boy2 b4 = new Boy2(43, "zhangsan");
		HashSet hashset = new HashSet();
		hashset.add(b1);
		hashset.add(b2);
		hashset.add(b3);
		hashset.add(b4);
		Iterator iterator = hashset.iterator();
		while(iterator.hasNext()){
			System.out.println(iterator.next());
		}
	}
}


阅读(1845) | 评论(0) | 转发(0) |
0

上一篇:23、常类型

下一篇:没有了

给主人留下些什么吧!~~