- 浏览: 480305 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (288)
- Java (70)
- Web (11)
- JSP (18)
- JavaScript (25)
- JQuery (22)
- HTML (7)
- CSS (2)
- Struts2.X (6)
- Ibatis/Mybatis (6)
- Hibernate (4)
- Spring (8)
- Oracle (23)
- MySql (9)
- Apache (1)
- Tomcat (9)
- Weblogic (2)
- Maven (6)
- Flex (0)
- Junit (2)
- Test (1)
- SVN (6)
- GIS (3)
- Android (1)
- Eclipse (10)
- Thread (3)
- JVM (1)
- Cache (2)
- Design pattern (1)
- Nosql (3)
- Linux (10)
- Hudson/Jenkins (1)
- MQ (1)
- Network (2)
- 生活工作 (5)
- 架构师之路 (6)
- 知识精华荟萃 (9)
- Interview (13)
最新评论
-
276847139:
方法很有效,我的问题就在是在父项目的.classpa ...
手动添加Maven Dependencies -
coosummer:
推荐使用http://buttoncssgenerator.c ...
button css 样式 -
lqz2012:
DBFFileReader是外部框架里面的吧,不是JDK的。楼 ...
java读取dbf文件 -
xudongcsharp:
lx13345 写道java.lang.NoSuchMetho ...
Spring常用错误 -
lx13345:
jar是hibernate3.3GA,ehcache-1.5. ...
Spring常用错误
关于集合:
ArraryList有序的集合,像数组一样,只不过存放的是每个对象的引用,可能存放的很多的引用是指向同样一个对象的。
HashSet存放之前先比较是否集合中有相等的对象,有就不存放,没有则存放进去
一、equal
声明格式
public boolean equals(Object obj)
其比较规则为:当参数obj引用的对象与当前对象为同一个对象时,就返回true,否则返回false.
为什么要设计equals方法在Object中?
因为任何时候我们定义自己类的时候,我们可以选择是否重写equals方法,增加了灵活性,如果我们不重写,就是继承与Object的equals方法,判断我们对象是否相等。
二、==
其比较规则为:当操作对象是基本类型时比较的是值是否相等1==1(true),当比较的是两个对象时则比较的是对象引用地址是否相同,即是否是同一对象
但是JDK类中有一些类覆盖了Oject类的equals()方法,比较规则为:如果两个对象的类型一致,并且内容一致,则返回true,这些类有:
java.io.file,java.util.Date,java.lang.string,包装类(Integer,Double等)
比如
Integer int1=new Integer(1);
Integer int2=new Integer(1);
String str1=new String("hello");
String str2=new String("hello");
int1==int2 (false,因为不同对象)
int1.equals(int2) (TRUE)
str1==str2 (false)
str1.equals(str2) (true)
三、ArrayList与HashSet:
ArrayList是有序 允许重复;HashSet不允许重复
ArrayList存放的是对象的引用,有可能重复存放同一个对象的引用
而HashSet不允许重复,所以在添加对象到HashSet中时会做查找比较,如果对象很多的话一一做比较会降低效率,进而产生hashcode.(hashcode是哈希算法的一中简单实现,他是一个对象的哈希吗值,每个对象都可以换算成一个hashcode值,而我们把一个集合分成N个区域,每个区域都有上线限,我们按照某种规则把对象放个某个区域内,当我们去查询遍历的时候按照这个规则去找就可以很快的找到该对象所在的区域进而在小范围内很快的找到该对象。)
举例
Junit
先使用hashcode,再使用equal,将大大优化执行效率!
注:使用hashcode的前提是对象必须是存储在hash集合当中
ArraryList有序的集合,像数组一样,只不过存放的是每个对象的引用,可能存放的很多的引用是指向同样一个对象的。
HashSet存放之前先比较是否集合中有相等的对象,有就不存放,没有则存放进去
一、equal
声明格式
public boolean equals(Object obj)
其比较规则为:当参数obj引用的对象与当前对象为同一个对象时,就返回true,否则返回false.
为什么要设计equals方法在Object中?
因为任何时候我们定义自己类的时候,我们可以选择是否重写equals方法,增加了灵活性,如果我们不重写,就是继承与Object的equals方法,判断我们对象是否相等。
二、==
其比较规则为:当操作对象是基本类型时比较的是值是否相等1==1(true),当比较的是两个对象时则比较的是对象引用地址是否相同,即是否是同一对象
但是JDK类中有一些类覆盖了Oject类的equals()方法,比较规则为:如果两个对象的类型一致,并且内容一致,则返回true,这些类有:
java.io.file,java.util.Date,java.lang.string,包装类(Integer,Double等)
比如
Integer int1=new Integer(1);
Integer int2=new Integer(1);
String str1=new String("hello");
String str2=new String("hello");
int1==int2 (false,因为不同对象)
int1.equals(int2) (TRUE)
str1==str2 (false)
str1.equals(str2) (true)
三、ArrayList与HashSet:
ArrayList是有序 允许重复;HashSet不允许重复
ArrayList存放的是对象的引用,有可能重复存放同一个对象的引用
而HashSet不允许重复,所以在添加对象到HashSet中时会做查找比较,如果对象很多的话一一做比较会降低效率,进而产生hashcode.(hashcode是哈希算法的一中简单实现,他是一个对象的哈希吗值,每个对象都可以换算成一个hashcode值,而我们把一个集合分成N个区域,每个区域都有上线限,我们按照某种规则把对象放个某个区域内,当我们去查询遍历的时候按照这个规则去找就可以很快的找到该对象所在的区域进而在小范围内很快的找到该对象。)
举例
public class GuestBook { private int id; private String name; private String address; public GuestBook(){ } public GuestBook(int id){ this.id = id; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + id; return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; GuestBook other = (GuestBook) obj; if (id != other.id) return false; return true; } }
Junit
@Test public void testCollection() { Collection col = new HashSet(); GuestBook g1 = new GuestBook(1); GuestBook g2 = new GuestBook(2); GuestBook g3 = new GuestBook(2); col.add(g1); col.add(g2); col.add(g3); col.add(g1); // 不重写hashcode和equals是3个 System.out.println(col.size()); // 重写hashcode和equals是2个 System.out.println(col.size()); /*只重写equals是3个,由于没有重写hashcode方法,默认 g2与g3的hashcode由他们不同的内存地址来计算存放在不的区域,所以还是可以add进去; 因为此问题所以有个默认的规则是如果两个对象equals相等则同时保证hashcode也相等*/ System.out.println(col.size()); // 重写hashcode和equals是1个 col.remove(g1); System.out.println(col.size()); // 重写hashcode和equals是2个 g1.setId(3); col.remove(g1);// hashcode已变找不到对应的对象,所以尽量不要修改参与hashcode运算的字段,会造成内存泄露 System.out.println(col.size()); }
先使用hashcode,再使用equal,将大大优化执行效率!
注:使用hashcode的前提是对象必须是存储在hash集合当中
发表评论
-
常见eclipse环境编译问题小结
2015-07-08 21:46 705Preferences-Installed JRES-jdk ... -
URLEncode
2014-12-29 18:53 957前言: 根据HTTP协议要求,传递参数的值中如果存在特殊字符( ... -
java日期格式小时制区别
2014-12-29 18:29 756SimpleDateFormat ss = new Sim ... -
opencsv
2014-11-11 15:50 922public class CSVDemo { publ ... -
密码学-加密解密 加签验签
2014-08-21 21:37 8908RSA: 1. 加签:用私钥加 ... -
eclipse常用插件
2014-07-27 20:49 7071 velocity 模板编辑插件 实用 http://pro ... -
互联网开发
2014-04-29 19:17 21291.设计数据库时,有时候会根据业务,为了避免表中出现冗余的字 ... -
Servlet Listener
2014-03-26 17:35 1343Listener功能 它是基于观 ... -
数据库事务
2014-03-22 09:56 820数据库事务(Database Transa ... -
java 堆与栈
2014-03-21 16:54 742栈(stack):主要保存基本类型(或者叫内置类型)(char ... -
String、StringBuilder、StringBuffer区别
2014-03-21 16:24 721String 字符串常量,不可变 StringBuffer 字 ... -
数字证书
2014-03-18 17:20 785http://blog.csdn.net/zhulinfeib ... -
fish
2014-03-18 16:48 0互联网和企业应用最大的区别在于表现层的以及业务的复杂性上面。这 ... -
系统代码基本规范
2014-03-13 22:41 0系统代码基本规范 排 ... -
try catch return
2014-03-11 16:22 759package com.java.test; impor ... -
PO/POJO/VO/BO/DAO/DTO
2013-12-26 17:12 793PO(persistant object) 持久对 ... -
servlet
2013-12-21 17:47 710用Servlet获取URL地址。在HttpServletReq ... -
native2ascii
2013-12-16 15:42 764>native2ascii 中国 \u4e2d\u5 ... -
xStream 框架
2013-12-10 15:31 778http://www.cnblogs.com/hoojo/a ... -
Bat命令学习
2013-08-22 17:33 1581基础部分: 一、基础语法: 1.批处理文件是一个“. ...
相关推荐
System.out.println("equal比较:" + str1.equals(str2)); // 输出 true ``` 在这里,`str1.equals(str2)` 返回 `true`,因为两个字符串对象的内容是相同的。 接下来,我们回顾 `equals()` 方法的五个特性: 1. *...
字符串哈希码 字符串的其他实用程序。... equal ( code , code2 ) ;原料药hashCode(str)参数: str:字符串对象返回: 编号:哈希码返回字符串的哈希码。 请注意,哈希码对于特定字符串是不可变的。执照麻省理工学院
### Java中`hashCode()`与`equals()`方法详解 #### 前言 在Java编程语言中,`hashCode()`和`equals()`方法是非常重要的概念,它们不仅对于深入理解Java内存管理至关重要,也是实现自定义类的关键部分之一。本文将...
这种基于值的 Equal 方法可以由 Java 类库中的所有原始封装类使用。 为什么忽略 equals() 和 hashCode() 会带来问题 如果我们忽略 equals() 和 hashCode() 方法,那么我们将不能可靠地检索相关的值,除非我们在 ...
boolean isEqual = student1.equals(student2); // 返回false ``` - 如果两个字符串内容相同,则返回`true`;反之,返回`false`。 2. **自定义类的`equals` 方法**: - 当比较自定义类的对象时,通常需要覆盖`...
hashCode()和equals()定义在Object类中,这个类是所有java类的基类,所以所有的java类都继承这两个方法。 使用hashCode()和equals() hashCode()方法被用来获取给定对象的整数。这个整数被用来确定对象被...
2、为什么改写equals()的时候,总是要改写hashCode() 两个原则: hashCode()的返回值和equals()的关系如下: 如果x.equals(y)返回“true”,那么x和y的hashCode()必须相等。 如果x.equals(y)返回...
Java 面试资料 Java 是一门面向对象的编程语言,广泛应用于 Android 应用开发、Web 开发、企业级应用开发等领域。作为一名 Java 开发者,需要具备扎实的 Java 基础知识和综合的编程能力。以下是 Java 面试中常见的...
Java中的`hashCode`方法是Java编程语言中的一个重要概念,它主要与对象的散列处理相关。在Java的`Object`类中定义了一个本地方法(native)`hashCode()`,该方法返回一个`int`类型的数值。这个数值是根据对象的状态...
#### 三、HashCode与Equal之间的关系 1. 如果两个对象通过`equals()`方法比较认为是相等的,那么它们的`hashCode()`值也应该是相同的。这是因为`equals()`方法用于比较对象内容是否相同,而`hashCode()`方法返回的...
equals() 方法和 hashCode() 方法是 Java 中两个非常重要的方法,它们的作用是分别比较两个对象的值和哈希值。图 2 展示了这两个方法的区别: * 如果两个对象相等(equal),那么他们一定有相同的哈希值。 * 如果两...
根据Java规范,如果两个对象相等(即`equals()`返回`true`),那么它们的`hashCode()`方法必须返回相同的值。这是因为`hashCode()`用于哈希表(如HashMap)中快速定位对象。相反,如果`equals()`返回`false`,`...
Java中的Java反射和对象比较 项目介绍 首先,通过以下方式设计Java类: 2个私有数据成员int IntValue; 字符串StringValue; 空构造函数定义公共方法void setIntValue(int iIn){...}定义公共方法void ...
在Java编程语言中,`equals()` 和 `hashCode()` 是两个非常重要的方法,它们主要用于比较对象的平等性以及在散列数据结构(如 `HashMap`、`HashSet` 等)中的对象定位。当我们创建自定义类时,有时需要根据业务需求...
在Java中,`equals`方法用于比较两个对象的内容是否相等,而`hashCode`方法返回对象的哈希码。如果两个对象通过`equals`方法比较相等,则它们的`hashCode`也应该相同。但是,如果两个对象的`hashCode`相同,并不能...
在这个个人总结中,我们将探讨几个关键的Java知识点,包括对象创建、equals与hashCode方法、对象序列化以及String、StringBuffer和StringBuilder的区别。 首先,让我们来看看创建Java对象的四种方式: 1. **New**...
1.9 String、StringBuffer、StringBuilder、hashCode和equal - String是不可变的字符串序列。 - StringBuffer和StringBuilder是可变字符序列,其中StringBuffer是线程安全的,StringBuilder则没有线程安全保证。 - ...
在Java编程语言中,`equals()` 和 `hashCode()` 方法是对象的基本组成部分,它们与对象的比较和哈希表(如 `HashMap`)的操作密切相关。在面试中,面试官提出的问题直指这两个方法的重要关联。 首先,`equals()` ...
在Java编程语言中,`equals()`方法和`==`运算符是用于比较对象之间关系的两种常见方式,但它们有着显著的区别。理解这些差异对于编写正确的代码至关重要。 首先,`==`运算符主要用于比较基本类型(如int、char、...
boolean isEqual = Color.GREEN.equals(Color.GREEN); 枚举类型的每个枚举常量可以使用 compareTo() 方法比较,例如: int compareTo = Color.GREEN.compareTo(Color.GREEN); 枚举类型的每个枚举常量可以使用 ...