怎么区分Set里的元素不重复

Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
应该从它俩的区别谈起,==是用来判断两者是否是同一对象(同一事物),而equals是用来判断是否引用同一个对象。再看一下Set里面存的是对象,还是对象的引用。根据java的存储机制可知,set里面存放的是对象的引用,所以当两个元素只要满足了equals()时就已经指向同一个对象,也就出现了重复元素。所以应该用equals()来判断。

总结:
1. equals() 判断对象内容
2. == 判断对象引用
3. Iterator 用来遍历容器中的元素

测试代码:
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class SetTest {
//结果输出为ELEM
static void AddToSet(){
String str = "ELEM";
String str1 = new String("ELEM");
Set set = new HashSet();
Set setCompare = new HashSet();
set.add(str);
set.add(str1);
setCompare.add(str1);
//Iterator是用来遍历容器中的元素的
Iterator itera = set.iterator();
Iterator iteraCompare = setCompare.iterator();
while(itera.hasNext())
{
System.out.println((String)itera.next());
}
while(iteraCompare.hasNext())
{
System.out.println((String)iteraCompare.next());
}
if(set.equals(setCompare)){
System.out.println("两个对象内容相同");
}
if(set == setCompare){
System.out.println("两个对象相等");
}

}
public static void main(String[] args){
SetTest.AddToSet();
}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值