黑马程序员技术交流社区
标题:
关于set的问题
[打印本页]
作者:
何创
时间:
2012-10-24 12:49
标题:
关于set的问题
今天在想一个问题,大家都知道set集合是不可重复的,但是我想问问,那么用什么方法来区分重复与否?是用==还是equals()?它们有什么区别啊?
作者:
黄邦荣
时间:
2012-10-24 12:52
Set里的元素是不能重复的,用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。
equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。
作者:
张忠豹
时间:
2012-10-24 12:56
上面那哥们的解释是张孝祥java就业宝典里面的……
TreeSet是用equals方法来区分,Treeset集合中的元素是否相等
HashSet是用hashCode与equals方法来区分,集合中元素是否相等。
作者:
up_
时间:
2012-10-24 14:18
Set只是一个接口,下面有众多的实现类,每个类的内部数据结构都不同,所以判断方法也
不一样,使用频率较高的有两个,一个是HashSet,它是通过自己的hashCode()方法得到哈希值,
来确定在HashSet集合中的位置。将元素存入HashSet集合时,会计算对象的哈希值来找到对象应
该放置的位置,如果该位置已有对象存在(它们的哈希值相同),那么会继续使用equals()方法来判断
这两个对象是否相同,如果相同,则不会存入集合,如果不同,则会在已有对象的位置上顺延一位存储该对象。
另一个是TreeSet,是通过自定义比较器来实现TreeSet集合对元素的排序的。
作者:
高正新
时间:
2012-10-24 15:22
Set是一个接口,它的实现类常见的有HashSet,TreeSet。
这里用HashSet来示范一下。
== 比较的是内存地址
import java.util.HashSet;
import java.util.Set;
public class SetTest {
public static void main(String[] args) {
Set s = new HashSet();
String s1 = "Hello";
String s2 = new String("Hello");
s.add(s1);
s.add(s2);
System.out.println(s);
}
}
复制代码
以上的输出结果是:
[Hello]
而s1 和 s2的地址肯定是不一样的。
所以它们比较的是值。
查阅api可以知道,HashSet从类 java.util.AbstractSet 继承了equals方法。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2