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();
}
}
版权声明:本文博客原创文章。博客,未经同意,不得转载。
java基金会成立Set的更多相关文章
- java基金会成立
在java在,数据收集的操作,应使用非常.最近看了零星收集的小知识,在这里,一点点排序. 它基本上是四个常用的类操作点总结集合. 首先.集合大致分为两个方向.一种是普通的集合类型,通过接口collec ...
- .NET基金会成立
作者 Jonathan Allen ,译者 臧秀涛 发布于 2014年4月8日 随着.NET基金会的成立,微软在成为主要的开源参与者的道路上又前进了一步.该基金会的宗旨是“成为越来越多的开源.NET项 ...
- 【Java基金会】Java整理面试问题和评论(一)
1. ArrayList,Vector, LinkedList 存储性能及特点 ArrayList 和 Vector 都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便添加和插入元素,它们都 ...
- Java基金会——JUnit
JUnit 測试的重要性毋庸质疑.但怎样使測试更加准确和全面.而且独立于项目之外而且避免硬编码,JUnit给了我们一个非常好的解决方式. 能够说JUnit是为单元測试而生的,一个Java语言的单元測试 ...
- 黑马程序猿——java基金会--jdk、变量
学习内容: 1.Java发展历史 2.jdk和jre的差别,功能. 3.jdk和jre的下载和安装 4.配置环境.path和classpath 5.helloworld程序 6.进制之间的转换 7.凝 ...
- JAVA基金会 (三)反射 反思的深度分析
上一页已经推出反映的一些基本概念,这主要是通过一个例子反映谈的过程,以及样品的实际应用. 这个样例是这种设计思路:从一个属性文件里读取一段字符串,然后,依据该字符串生成相应的类实例对象:这之后另一个增 ...
- java基金会 之 HashMap统计csvWord文档
一:知识的补充( 这个HashMap Map 和 c++的Map还是有非常大的区别,惊人的差异大的人,当然,两者的作用是相同的,但函数名出一个非常大的.即使iterator的差是非常大的 ) (1)H ...
- 阿里雷卷:Reactive 基金会的成立将对开发方式带来哪些影响?
作者 | 赵钰莹 近日,Linux 基金会宣布成立 Reactive 基金会.对于 Reactive,各位开发者应该并不陌生,尤其是 Node.js 开发者,但真正了解并意识到这件事情对开发方式带来的 ...
- 最好的Java IDE之争:Eclipse PK IntelliJ IDEA
话说,好马配好鞍,一个好的工匠,必定要有一套好的工具才能打造出最好的工艺给大家.之前,Plumbr团队里的所有成员都使用Eclipse编辑器,而如今,大家都成为IntelliJ IDEA用户.那么,到 ...
随机推荐
- 透神器ngrok
内网穿透神器ngrok 相信做Web开发的同学们,经常会遇到需要将本地部署的Web应用能够让公网环境直接访问到的情况,例如微信应用调试.支付宝接口调试等.这个时候,一个叫ngrok的神器可能会帮到你, ...
- Boost Thread学习笔记五
多线程编程中还有一个重要的概念:Thread Local Store(TLS,线程局部存储),在boost中,TLS也被称作TSS,Thread Specific Storage.boost::thr ...
- Element.Event
addEvent(type,fn):为DOM元素增加一个事件监听器 removeEvent(type,fn):移除先前为DOM元素添加的事件监听器 eg: var destroy = function ...
- 页面提交错误,页面间参数传递java.lang.NumberFormatException: null
多次出现这样的错误,在点击一个按钮触发提交整个页面的事件时,总是报错,不止一次出现这样的错误了. 出现这种问题的分析: 1 我们从这个问题的本身来看,java.lang.NumberFormatExc ...
- MySQL 存储过程例子,不能在if else里面用begin end否则会报错Error Code : 1064!
Error Code : 1064 You have an error in your SQL syntax; check the manual that corresponds to your My ...
- opencv做的美女找茬程序~
// CMP.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <cv.h> #include <high ...
- KVM 实现机制
1.1. KVM简介 KVM是一个基于Linux内核的虚拟机,它属于完全虚拟化范畴,从Linux-2.6.20开始被包含在Linux内核中.KVM基于x86硬件虚拟化技术,它的运行要求Intel ...
- android在假设绘制自己定义的bitmap,然后返回给ImageView
先来说一下FontMetrics这个类.这个类是关于字符属性和測量的类 用图能够更精确的知道各个属性的含义: 我们在Layout中有一个ImageView,我们能够通过: <span style ...
- 初步掌握Yarn的架构及原理(转)
1.YARN 是什么? 从业界使用分布式系统的变化趋势和 hadoop 框架的长远发展来看,MapReduce的 JobTracker/TaskTracker 机制需要大规模的调整来修复它在可扩展性, ...
- vc++远程调试工具
简单来说: 1>在远程机器跑VC自带的远程调试工具msvsmon.exe,并把要调试的程序跑起来 2>用VC调试器附加进程,即可调试 先展开来说: VC8,VC9都自带远程调试工具,可以在 ...