我觉得不算吧 因为对于TreeSet而言这两个元素就是不相等的。举个例子:- import java.util.*;
- 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);
- }
- }
复制代码 上面代码中System.out.println(set.add(z1));等于是把同一个对象再次添加
到集合中,因为z1对象的compareTo方法返回1,虽然equals方法总是返回true
但TreeSet会认为z1对象和他自己也不相等,因此TreeSet可以添加两个z1对象
|