Redian新闻
>
问个set和literal String的问题
avatar
问个set和literal String的问题# Java - 爪哇娇娃
c*d
1
NIW I-140刚被批准,但因为排期,还无法file I-485。那个漫长的排期,让我感觉将
会等得很痛苦。请问,我能重新申请EB1A吗?二者的材料准备清单是不是没有什么差别
?另外,我是在A校file的NIW I-140, 现在换工作在B校。谢谢!
avatar
n*1
2
为什么我这里的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
}
}
avatar
I*i
3
同问。大侠们请回答啊。
avatar
T*U
4
首先,你调用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;

avatar
x*p
5
yes for sure.

【在 I***i 的大作中提到】
: 同问。大侠们请回答啊。
avatar
n*1
6
对,那个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的值的

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

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

avatar
n*1
8
我明白你意思了,谢谢

。你

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

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。