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();
}
}
应该从它俩的区别谈起,==是用来判断两者是否是同一对象(同一事物),而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();
}
}