java基金会成立Set

1、设置

当向集合Set中添加对象时。首先集合计算要添加对象的hashcode,依据该值得到一个位置用来存放当前的对象,当在该位置没有一个对象存在的时候,集合set觉得该对象在集合中不存在,直接添加进去。假设在该位置有一个对象存在。接着将准备添加到集合中的的对象与该位置上的对象进行equals比較。若返回false,在进行一次散列。将该对象放到散列后计算出的新地址。若返回true,不会再将该对象添加到集合中

2、当重写equals方法时,必需要重写hashcode方法

假设一个类的两个对象。使用equals方法比較时。结果为true,那么这两个对象必须具有同样的hashcode

3、请參考下面代码执行。查看输出结果来理解以上说法

test1和test2比較的是String,因为String重写了equals方法和hashcode方法。所以,String = “abc"。和 string = new String("abc")比較equals方法时候是返回true,因此test1和test2输出结果一致。Person类没有重写equals方法。而Person1重写了,所以test3和test4输出结果不一致。

/**
 * author Ding Chengyun
 * 2014-2-23
 */
package test;

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

/**
 * @author Ding Chengyun
 * 2014-2-23
 */
public class SetTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		test4();
	}

	public static void test1() {
		Set<String> s1 = new HashSet<String>();
		s1.add("abc");
		s1.add("xyz");
		s1.add("abc");
		for (Iterator<String> iter = s1.iterator(); iter.hasNext();) {
			System.out.println(iter.next());
		}
//		输出:
//		abc
//		xyz
	}

	public static void test2() {
		Set<String> s1 = new HashSet<String>();
		s1.add(new String("abc"));
		s1.add(new String("xyz"));
		s1.add(new String("abc"));
		for (Iterator<String> iter = s1.iterator(); iter.hasNext();) {
			System.out.println(iter.next());
		}

//		输出:
//		abc
//		xyz

	}

	public static void test3() {
		Set<Person> s = new HashSet<Person>();
		s.add(new Person("zhangsan"));
		s.add(new Person("lisi"));
		s.add(new Person("zhangsan"));
		for (Iterator<Person> iter = s.iterator(); iter.hasNext();) {
			System.out.println(iter.next().getName());
		}

//		输出:
//		zhangsan
//		zhangsan
//		lisi

	}

	public static void test4() {
		Set<Person1> s = new HashSet<Person1>();
		s.add(new Person1("zhangsan"));
		s.add(new Person1("lisi"));
		s.add(new Person1("zhangsan"));
		for (Iterator<Person1> iter = s.iterator(); iter.hasNext();) {
			System.out.println(iter.next().getName());
		}
//		输出:
//		lisi
//		zhangsan
	}
}

class Person {
	String name;
	public Person(String name) {
		this.name = name;
	}
	public String getName() {
		return name;
	}
}

class Person1 {
	String name;
	public Person1(String name) {
		this.name = name;
	}
	public String getName() {
		return name;
	}

	public boolean equals(Object obj) {
		if (this == obj) {
			return true;
		}
		if (obj instanceof Person1) {
			Person1 p = (Person1)obj;
			if (this.name.equals(p.getName())) {
				return true;
			}
		}
		return false;
	}

	public int hashCode() {
		return name.hashCode();
	}
}

版权声明:本文博客原创文章。博客,未经同意,不得转载。

时间: 2024-10-20 01:41:38

java基金会成立Set的相关文章

java基金会成立

在java在,数据收集的操作,应使用非常.最近看了零星收集的小知识,在这里,一点点排序. 它基本上是四个常用的类操作点总结集合. 首先.集合大致分为两个方向.一种是普通的集合类型,通过接口collection向下扩展,还有一种是map接口下的键值对的集合类型.今天主要说的的四个类ArrayList和LinkedList是collection接口下List接口的两个实现类.另外两个HashMap和TreeMap则是Map接口的实现类. 首先,对于Collection,它的主要分支有两个:List和

开源GIS软件 2

Android上的导航软件 AndNav AndNav 是一款 Android 手机上的 GPS导航软件(非开源).软件支持GPS定位信息,目的地查询,道路建议管理,导航提示等功能,十分强大的一款软件. 开源WebGIS项目 UMN MapServer MapServer,它是美国明尼苏达大学 (University of Minnesota, 简称 UMN)在二十世纪90 年代利用 C语言开发的开源 WebGIS项目. [MapServer简介] 它起源于 UMN和美国国家航空航天局的合作项目

Eclipse 版本选择

查看Eclipse的版本号: 1. 找到eclipse安装目录 2. 进入readme文件夹,打开readme_eclipse.html 3. readme_eclipse.html呈现的第二行即数字版本号,如: Eclipse 版本选择: Java IDE for Java 开发者 JAVA EE for Jave EE 开发者 C/C++ forC/C++ 开发者 PHP for PHP 开发者 可以在下面地址下载自己希望的版本 https://www.eclipse.org/downloa

Eclipse使用前准备(转)

Eclipse的发布流程 M1  08/19/2009      M2     09/30/2009     M3     11/11/2009     M4     12/16/2009     M5     02/03/2010     M6     03/17/2010     API FreezeM7     05/05/2010     Feature FreezeRC1     05/19/2010     RC2     05/26/2010     RC3     06/02/2

Eclipse各个版本号名字的由来

最近闲来无事,就下载了最新的开发软件玩玩,看看都有哪些创新,无意间发现Eclipse最新版的名字叫Luna,撸呐.名字让我很纳闷,他的新特性到没有什么特别之处:完成支持java8,提供了貌似很酷的黑色主题,用起来却不咋地..我最好奇的是他为什么会叫这个名字呢,觉得很奇怪,于是就去搜了下,原来如此. eclipse版本发布图 下面介绍一下Eclipse的版本发布和开发过程: Eclipse最初是由IBM公司开发的替代商业软件Visual Age for Java的下一代IDE开发环境,2001年1

IBM董事长亲自站台,开源为什么对IBM这么重要?

在2019年2月12日-15日的IBM Think 2019大会上,IBM董事长.总裁及首席执行官Ginni Rometty亲自参与了除主旨演讲之外的唯一一个分论坛并担任对话环节主持人,这就是"开源:企业的未来和创新的基石"分论坛.参与分论坛的除了Rometty外,还有Cloud Foundry执行总监Abby Kearns.Linux基金会执行总监Jim Zemlin.Redmonk联合创始人Steve O'Grady.Morgan Stanley执行总监Marcelo Labre和

腾讯万亿级分布式消息中间件TubeMQ正式开源

TubeMQ是腾讯在2013年自研的分布式消息中间件系统,专注服务大数据场景下海量数据的高性能存储和传输,经过近7年上万亿的海量数据沉淀,目前日均接入量超过25万亿条.较之于众多明星的开源MQ组件,TubeMQ在海量实践(稳定性+性能)和低成本方面有着比较好的核心优势. TubeMQ 捐赠 Apache 基金会 9月12日,Apache软件基金会成立20周年之际,腾讯在ApacheCon宣布TubeMQ 开源.TubeMQ 启动计划捐赠 Apache 基金会的流程. TubeMQ系统特点 1.

操作系统发展简史

CP/M系统 计算机语言百花争妍的七十年代,计算机本身正向微型化方向发展.1971年,Intel 公司成功地研制出了四位Intel 4004芯片,1973年,又研制成功八位Intel 8086芯片.微型机的诞生,已经指日可待. 七十年代中期,台式微机,工作站,超级微机,膝上机相继面世,"谁来指挥他们",人们千呼万唤. 事实上,早在1972年,AMAA(美国微型机协会)就悄悄地为一个"指挥系统"作临产前的准备了,他们用PL/M程序设计语言为Intel 8086编写了纸

Bluemix公有云入华,IBM加入云大战,祭出三大杀器

(上图为IBM大中华区董事长陈黎明揭开了Bluemix公有云落地中国的大幕) 中国和印度正在成为全球炙手可热的云计算厂商争夺之地.根据451 Research在今年9月发布的调研数据,在两地有近200家云服务商,向本地客户提供IaaS.PaaS和SaaS服务.451 Research预测中国到2020年将创造159亿美元的云计算市场,而Gartner预测到2020年全球云计算市场营收为1435.3亿美元,也就是说届时中国将占全球云计算市场11%的份额. 2016年10月19日,IBM宣布正式与中