• Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?


    说明:其实这个题目本身有问题!因为Set只是一个接口,它的不同实现类判断元素是否相等的标准是不同的。笼统地说,Set里的元素是不能重复的,判断元素重复使用equals()。而不是==

    对于HashSet而言,判断两个对象是否相等是通过equals()hashCode()方法,只要两个对象通过 equals()比较返回false、或两个对象的hashCode()不相等,那么HashSet就会把它们当成不相同。

    对于TreeSet而言,判断两个对象相等的唯一标准是:两个对象通过compareTo(Object obj)比较是否返回0,与equals()方法无关。只要两个对象通过compareTo(Object obj)比较没有返回0Java就会把它们当成两个对象处理——这一点是很多人容易误解的,一个示例来说明:

    class Z implements Comparable

    {

    int age;

    public Z(int age)

    {

    this.age = age;

    }

    // 重写equals()方法,总是返回true

    public boolean equals(Object obj)

    {

    return true;

    }

    //重写了compareTo(Object obj)方法,总是返回正整数

    public int compareTo(Object obj)

    {

    return 1;

    }

    }

    public class TreeSetTest2

    {

    public static void main(String[] args)

    {

    TreeSet set = new TreeSet();

    Z z1 = new Z(6);

    set.add(z1);

    //输出true,表明添加成功

    System.out.println(set.add(z1));    //

    //下面输出set集合,将看到有两个元素

    System.out.println(set);

    //修改set集合的第一个元素的age变量

     ((Z)(set.first())).age = 9;

    //输出set集合的最后一个元素的age变量,将看到也变成了9

    System.out.println(((Z)(set.last())).age);

    }

    }

    上面程序中两个Z对象通过equals()比较总会返回true,但通过compareTo(Object obj)比较总是不会返回0,因此两次向TreeSet中添加同一个元素,TreeSet会把它们当成不同的对象进行处理,最后TreeSet集合中会显示有两个对象,但实际上是同一个对象。

    Java Program!
  • 相关阅读:
    软连接
    libmysqlclient.so.18 not found 的解决方法
    查找某个文件并全部删除
    sudo passwd root:没有相关指令
    智能解析套件
    日志类封装
    windows安装mysql
    xshell报错Socket error Event: 32 Error: 10053
    appium简明教程(8)——那些工具
    appium简明教程(7)——Desired Capabilities详解
  • 原文地址:https://www.cnblogs.com/programb/p/14068523.html
Copyright © 2020-2023  润新知