A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 何创 中级黑马   /  2012-10-24 12:49  /  1590 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天在想一个问题,大家都知道set集合是不可重复的,但是我想问问,那么用什么方法来区分重复与否?是用==还是equals()?它们有什么区别啊?

评分

参与人数 1黑马币 +15 收起 理由
韩军博 + 15

查看全部评分

4 个回复

倒序浏览
Set里的元素是不能重复的,用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。
equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。
回复 使用道具 举报
上面那哥们的解释是张孝祥java就业宝典里面的……
TreeSet是用equals方法来区分,Treeset集合中的元素是否相等
HashSet是用hashCode与equals方法来区分,集合中元素是否相等。
回复 使用道具 举报
up_ 中级黑马 2012-10-24 14:18:13
板凳
Set只是一个接口,下面有众多的实现类,每个类的内部数据结构都不同,所以判断方法也
不一样,使用频率较高的有两个,一个是HashSet,它是通过自己的hashCode()方法得到哈希值,
来确定在HashSet集合中的位置。将元素存入HashSet集合时,会计算对象的哈希值来找到对象应
该放置的位置,如果该位置已有对象存在(它们的哈希值相同),那么会继续使用equals()方法来判断
这两个对象是否相同,如果相同,则不会存入集合,如果不同,则会在已有对象的位置上顺延一位存储该对象。
另一个是TreeSet,是通过自定义比较器来实现TreeSet集合对元素的排序的。
回复 使用道具 举报
Set是一个接口,它的实现类常见的有HashSet,TreeSet。
这里用HashSet来示范一下。
== 比较的是内存地址
  1. import java.util.HashSet;
  2. import java.util.Set;

  3. public class SetTest {
  4.         public static void main(String[] args) {
  5.                 Set s = new HashSet();
  6.                
  7.                 String s1 = "Hello";
  8.                 String s2 = new String("Hello");
  9.                 s.add(s1);
  10.                 s.add(s2);
  11.                 System.out.println(s);
  12.         }
  13. }
复制代码
以上的输出结果是:
[Hello]

而s1 和 s2的地址肯定是不一样的。
所以它们比较的是值。
查阅api可以知道,HashSet从类 java.util.AbstractSet 继承了equals方法。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马