zoukankan      html  css  js  c++  java
  • 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!
  • 相关阅读:
    HDU 1525
    kmp模板
    hdu 4616 Game(树形DP)
    hdu 4619 Warm up 2(并查集活用)
    hdu 4614 Vases and Flowers(线段树加二分查找)
    Codeforces 400D Dima and Bacteria(并查集最短路)
    poj 2823 Sliding Window (单调队列)
    hdu 2196 Computer(树形dp)
    hdu 4604 Deque
    最短路径
  • 原文地址:https://www.cnblogs.com/programb/p/14068523.html
Copyright © 2011-2022 走看看