由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Java版 - 问个set和literal String的问题
相关主题
问HashSet的问题?Java练习题 3
问个hashtable实现问题问一道关于Vector的题
Object比较answer Re: how HashMap/Hashtable compare key?
Leetcode ==> Max Points on a Line, 我的程序到底哪出问题了treemap和hashma p的问题
问个Object.hashCode()的问题Re: 谁有Java或Oracle的毒招 ?
TIJ上写错了?Do I need to implement equals and hashCode in domain object
请教一段代码,关于hashCode()Java的工作面试主要考什么?主要是算法吗?
也问个 HashMap问题请教一个语法和递归的问题
相关话题的讨论汇总
话题: string话题: wrapstring话题: abc话题: equals话题: new
进入Java版参与讨论
1 (共1页)
n******1
发帖数: 3756
1
为什么我这里的literal string 和我的封装类equals不上呢,放进set里面也说不相同
,但是hashcode是相等
import java.util.HashSet;
import java.util.Set;
public class SetTesting{

static class WrapString{
String str;
public WrapString(String str){
this.str = str;
}

@Override
public String toString(){
return str;
}

@Override
public int hashCode(){
return str.hashCode();
}
@Override
public boolean equals(Object o){
if(o == this)
return true;
if(o.hashCode() == this.hashCode())
return true;
if(o instanceof String){
String objectString = (String) o;
if(objectString.hashCode() == hashCode())
return true;
}
return false;
}
}

public static void main(String[] args){
Set set = new HashSet();
System.out.println(new WrapString("abc").equals(new String("abc")));
//true
System.out.println(new WrapString("abc").equals(new WrapString("abc"
))); //true
System.out.println("abc".equals(new String("abc"))); //true
System.out.println("abc".hashCode());
System.out.println(new WrapString("abc").hashCode());
System.out.println("abc".equals(new WrapString("abc")));//false
System.out.println(new WrapString("abc").equals("abc"));//true
set.add(new WrapString("abc"));
set.add(new WrapString("abc"));
set.add(new String("abc"));
set.add("abc");
System.out.println(set.size()); //2
}
}
T****U
发帖数: 3344
2
首先,你调用string的equal method 比较两个不同的类,当然结果是false.
第二,wrapstring的equal方法的逻辑是错误的,hash相等,string并不一定相等/相同
,你要重新复习一下hashcode.如果这个逻辑你是故意 的,那你应该知道系统string类
的equal方法不是看hashcode的,而是比较单个char的值的

【在 n******1 的大作中提到】
: 为什么我这里的literal string 和我的封装类equals不上呢,放进set里面也说不相同
: ,但是hashcode是相等
: import java.util.HashSet;
: import java.util.Set;
: public class SetTesting{
:
: static class WrapString{
: String str;
: public WrapString(String str){
: this.str = str;

n******1
发帖数: 3756
3
对,那个equals确实是我贪图方便
或者我这样问吧,其实我主要想解决两个问题
1.如果我没法改变String的方法,String又不提供继承,那我怎么让可以让我这个类拿
去和String比较让它相等呢,我想到其中一种可能是调用toString的,这里我这里又写
了一个toString的原因
2.另外对于set,我这样直接add,怎么排重呢

【在 T****U 的大作中提到】
: 首先,你调用string的equal method 比较两个不同的类,当然结果是false.
: 第二,wrapstring的equal方法的逻辑是错误的,hash相等,string并不一定相等/相同
: ,你要重新复习一下hashcode.如果这个逻辑你是故意 的,那你应该知道系统string类
: 的equal方法不是看hashcode的,而是比较单个char的值的

T****U
发帖数: 3344
4
不能直接比较,因为equal首先就判断是不是string类,不是直接就return false了。你
或者把string包装成你的类,再加到set比较;或者把你类里面的string提出来。
排重是什么意思?set本身就是unique的,重复(equal)的加不进去

【在 n******1 的大作中提到】
: 对,那个equals确实是我贪图方便
: 或者我这样问吧,其实我主要想解决两个问题
: 1.如果我没法改变String的方法,String又不提供继承,那我怎么让可以让我这个类拿
: 去和String比较让它相等呢,我想到其中一种可能是调用toString的,这里我这里又写
: 了一个toString的原因
: 2.另外对于set,我这样直接add,怎么排重呢

n******1
发帖数: 3756
5
我明白你意思了,谢谢

。你

【在 T****U 的大作中提到】
: 不能直接比较,因为equal首先就判断是不是string类,不是直接就return false了。你
: 或者把string包装成你的类,再加到set比较;或者把你类里面的string提出来。
: 排重是什么意思?set本身就是unique的,重复(equal)的加不进去

1 (共1页)
进入Java版参与讨论
相关主题
请教一个语法和递归的问题问个Object.hashCode()的问题
hashCode() in String ClassTIJ上写错了?
学以致用,但多此一举?请教一段代码,关于hashCode()
如何确保每次读入的字符串都是unique的也问个 HashMap问题
问HashSet的问题?Java练习题 3
问个hashtable实现问题问一道关于Vector的题
Object比较answer Re: how HashMap/Hashtable compare key?
Leetcode ==> Max Points on a Line, 我的程序到底哪出问题了treemap和hashma p的问题
相关话题的讨论汇总
话题: string话题: wrapstring话题: abc话题: equals话题: new