- 浏览: 1357064 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (453)
- Struts2 (4)
- Struts1 (16)
- Spring (9)
- Hibernate (5)
- AJAX (16)
- MS Server (9)
- Oracle (35)
- 测试技术 (5)
- 其他 (37)
- JSF (1)
- EJB (5)
- ASP.NET (9)
- iBATIS (5)
- Struts Spring Hibernate (2)
- HTML (12)
- Eclipse使用 (5)
- 设计模式 (5)
- JSP (32)
- 正则表达式 (2)
- 服务器 (12)
- Java基础 (48)
- MySQL (4)
- 面试 (22)
- UML (1)
- 数据结构 (3)
- Ant (2)
- 规范 (4)
- JavaScript (29)
- 软件使用及技巧 (25)
- PHP (1)
- DWR (3)
- FreeMarker (1)
- ExtJs (17)
- JFreeChart (9)
- Reports (2)
- JavaException (1)
- Java Mail (1)
- Flex (9)
- 异常 (12)
- Log4j (2)
- WebService (1)
- jQuery (1)
- Sybase (2)
- myeclipse_plugin (2)
- Linux (5)
- jbpm (2)
- SCM (1)
- mongoDB (1)
最新评论
-
lihua2008love:
<typeAlias alias="User& ...
IBATIS简单操作 -
lihua2008love:
...
关于项目框架设计的一点学习 -
c_jinglin:
我使用<OBJECT CLASSID="cls ...
这就是个静态页面通过js控制mscomm对某com设备进行访问的例子. -
zlbjava:
赞,用了还不错
java获取请求的ip地址,并解析ip所属地区 -
完美天龙:
cs842813290 写道楼主,我明白的地方:在链表已有N个 ...
JAVA实现双向链表
1、当向集合set中增加对象时,首先集合计算要增加对象的hashCode码,根据该值来得到一个位置来存放当前的对象,当在该位置没有一个对象存在的话,那么集合set认为该对象在集合中不存在,直接增加进去。如果在该位置有一个对象的话,接着将准备增加到集合中的对象与该位置上的对象进行equals方法比较,如果该equals方法返回false,那么集合认为集合中不存在该对象,再进行一次散列,将该对象放到散列后计算出的新地址里,如果equals方法返回true,那么集合认为集合中已经存在该对象了,不会再将该对象增加到集合中了。
2、当重写eqals方法时,必须要重写hashCode方法,如果一个类的两个对象,使用equals方法比较时,结果为true,那么该两个对象必须具有相同的hashCode
Object的hashCode()方法中有这样的说明:
If two objects are equal according to the equals(Object) method, then calling the hashCode method on each of the two objects must produce the same integer result.
It is not required that if two objects are unequal according to the equals(java.lang.Object) method, then calling the hashCode method on each of the two objects must produce distinct integer results. However, the programmer should be aware that producing distinct integer results for unequal objects may improve the performance of hashtables.
意味着在比较对象的时候需要重写hashCode()和equals()方法,并且要保证两者返回的是相同结果,也就是说:重写了两个方法后,equals()返回的是true时,hashCode()也必须返回true;equals()返回的是false时,hashCode()也必须返回false
Object的hashCode()计算的是内存地址,只有内存地址相同时,两个Object的hashCode()方法返回相同的值。
示例代码:
- package com.test;
- import java.util.HashSet;
- import java.util.Iterator;
- import java.util.Set;
- public class SetTest {
- public static void main(String[] args) {
- Set set = new HashSet();
- set.add(new String("abc"));
- set.add(new String("xyz"));
- set.add(new String("abc"));
- for(Iterator iter = set.iterator();iter.hasNext();)
- {
- System.out.println(iter.next());
- }
- Set set2 = new HashSet ();
- set2.add(new People("zhangsan"));
- set2.add(new People("lisi"));
- set2.add(new People("zhangsan"));
- for(Iterator iter = set2.iterator();iter.hasNext();)
- {
- System.out.println(iter.next().getName());
- }
- }
- }
- class People
- {
- private String name;
- public People(String name)
- {
- this.name = name;
- }
- public String getName()
- {
- return this.name;
- }
- public boolean equals(Object obj)
- {
- if(null != obj)
- {
- if(this == obj)
- {
- return true;
- }
- if(obj instanceof People)
- {
- People people = (People)obj;
- if((this.name).equals(people.name))
- {
- return true;
- }
- }
- }
- return false;
- }
- public int hashCode()
- {
- return this.name.hashCode();
- }
- }
输出结果:
xyz
abc
zhangsan
lisi
原因是String类重写了hashCode和equals方法,使得当String对象的内容相同时,都返回true
而在程序代码People中我们也重写了Object的hashCode和equals方法,使得当People对象的name属性值内容相同时都返回true
发表评论
-
百度之星第一场题目
2009-06-01 08:55 1732百度之星2009程序设计大赛 初赛第一场试题 ... -
简单的JAVA反射应用
2008-07-02 23:39 1471获得某个类的对应的Class对象的方式: 1、使用类的.cl ... -
参数传递的过程
2008-07-02 23:37 1269在JAVA里面,对于方法的参数传递,不管是原生数据类型还是引用 ... -
String类要点
2008-07-02 23:36 14091、考查"=="的结果 2、String的 ... -
session与cookie的区别?
2008-07-02 23:34 1934session与cookie的区别? ... -
关于多线程
2008-07-02 23:33 1227题目:请编写一个多线程程序,实现两个线程,其中一个线程完成对某 ... -
迅雷面试部分题
2008-05-11 07:06 1875在做的时候,把部份觉 ... -
2007年8月25日华为的几个面试题
2008-05-08 02:30 15621、下题的输出是什么: /** * 问下题的输出结果是什么 ... -
联想面试智力题,听说前面三道题必考(有部份解答)
2008-05-08 02:08 3238联想面试智力题,所说前面三道题必考,这个没有被证实过。不过,当 ... -
JAVA面试题
2008-05-08 02:06 1744网上找到一些JAVA面试题,不过,不管是不是面试题,有些时候在 ... -
华为的JAVA面试题及答案(部分)
2008-05-08 01:58 5130(后记:没有想到华为 ... -
作一份高水准的简历
2008-05-08 01:55 1960简历种类 1.中式 如果 ... -
华为面试题及答案
2008-05-08 01:52 5207这是第三次接到华为的面试电话了,第一交是自己投的简历,第二次及 ... -
JAVA面试题集 (下)
2008-05-07 22:58 1570Servlet方面 1、说一说Servlet的生命周期? ... -
JAVA面试题集 (上)
2008-05-07 22:55 18181.C++或Java中的异常处理 ... -
Java 面试中的陷阱
2008-05-07 22:53 1334以下题目来自包括IBM, E* ... -
Java学习题
2008-05-07 22:52 1408据说,如果你能独立完成(不用看资料,不借助调试)回答在60分以 ... -
外企面试官最爱提的问题TOP10
2008-05-07 22:51 14511.请介绍一下你自己。 这是外企常问的问题。一般人回 ... -
70个JAVA问答!
2008-05-07 22:33 18371. 问:在JAVA与JSP中要调 ... -
java常见面试题
2008-05-07 22:28 16831.面向对象的特征有哪些方面 1.抽象: 抽象就是忽 ...
相关推荐
`时,实际上你创建的并不是一个String对象,而是声明了一个名为`s`的引用变量,它指向内存中一个包含文本"Hello world!"的String对象。这里的重点是,`s`只是一个指针,它存储了对象的地址,而不是对象本身。如果再...
本文将深入探讨Java多线程的相关知识点,帮助你全面理解并掌握这一核心概念。 1. **线程基础** - **线程定义**:线程是操作系统分配CPU时间的基本单位,每个进程至少包含一个线程。 - **线程创建**:Java提供了两...
很多人都搞不明白,查了很多资料还是不太明白。实际上就是一些类似通配符在作怪和其他语言也差不多。附件带上了,可以研究研究,构造正则表达式的方法和创建数学表达式的方法一样。也就是用多种元字符与运算符可以将...
着眼于成为专业人员从销售情况和策略着手搞清客户不感兴趣的原因关注最有潜力的客户为以后的销售活动作铺垫启发客户思考主动发掘客户的需求把益处传达给客户建立友好关系明确说明你想让客户怎么做确信客户明白你说的...
首先,我们要明白的是**Java中的对象引用**。在Java中,当我们声明一个对象,如`String s = "Hello world!"`时,并不是创建了一个新的String对象,而是声明了一个指向已存在常量池中"Hello world!"字符串的引用。这...
之前的数据结构中,很多涉及到图的实现,尤其那些代码实在是晦涩难懂,搞得我实在不想学习,后来在算法课上学到的东西就有点不同了,也许是经过时间的打磨,感觉到现在的代码没有那么难懂了。 结论 通过本次实验,...
14.4 继承中关于属性的一些问题.169 14.5 小 结 .172 第四部分 深入了解 C#.174 第十五章 接 口 .174 15.1 组件编程技术 .174 15.2 接 口 定 义 .177 15.3 接口的成员 .178 15.4 接口的实现 .182 ...
者看完整篇内容后再去把概念搞明白吧。 2.什么是类,什么是对象,类和对象之间的关系 类的概念:类是具有相同属性和服务的一组对象的集合。它为属于该类的所有对象提供了统一 的抽象描述,其内部包括属性和服务两个...
和他们俩住的远 也没得商量 思路上来就自己搞完了 项目名:手机T9输入法模拟器 参加人员:小枪 开发平台:window XP 开发工具:visual studio 2005 , sqlserver 2005 重点要点:全程数据库操作语句 ...
@echo $@ $(subst output,OUTPUT,$@) $^ # $@指这个规则里所有目标的集合,$^指这个规则里所有依赖的集合。该行是把目标(bigoutput或littleoutput)里所有子串output替换成大写的OUTPUT (二)隐含规则 对...