解决方案 »

  1.   

    CompareTo是用来排序的,TreeSet是有序set!
      

  2.   

    这个我知道啊。我只是想明白在TreeSet中加元素的问题。CompareTo不返回0是否一定就能添加进去?
      

  3.   

    compare只是比较set里面的对象,如果为0则只会出现一个
    判断集合对象是否相等还是要用equals方法
      

  4.   

    那么如果TreeSet集合是否只需要保证CompareTo返回0就行了么?不需要保证对象是否相等?
    我测试过,如果一个类的compareTo方法总是返回-1,equals方法返回True,还是能往TreeSet中无限添加这个类的同一个对象的。
      

  5.   

    那么如果TreeSet集合是否只需要保证CompareTo返回0就行了么?不需要保证对象是否相等?
    我测试过,如果一个类的compareTo方法总是返回-1,equals方法返回True,还是能往TreeSet中无限添加这个类的同一个对象的。是的添加的时候不管equals 
    可以看api
    TreeSet
    public TreeSet(Comparator<? super E> c)构造一个新的空 set,该 set 根据指定的比较器进行排序。所有插入到该 set 的元素都必须可由指定的比较器相互比较:为 set 中的任何元素 e1 和 e2 执行 comparator.compare(e1, e2) 时必须不抛出 ClassCastException。如果用户尝试将违背此约束的元素添加到 set 中,则 add(Object) 调用将抛出 ClassCastException。 参数:
    c - 用于对此 set 进行排序的比较器。null 值表示应该使用元素的自然顺序。
      

  6.   

    那么如果TreeSet集合是否只需要保证CompareTo返回0就行了么?不需要保证对象是否相等?
    我测试过,如果一个类的compareTo方法总是返回-1,equals方法返回True,还是能往TreeSet中无限添加这个类的同一个对象的。是的添加的时候不管equals 
    可以看api
    TreeSet
    public TreeSet(Comparator<? super E> c)构造一个新的空 set,该 set 根据指定的比较器进行排序。所有插入到该 set 的元素都必须可由指定的比较器相互比较:为 set 中的任何元素 e1 和 e2 执行 comparator.compare(e1, e2) 时必须不抛出 ClassCastException。如果用户尝试将违背此约束的元素添加到 set 中,则 add(Object) 调用将抛出 ClassCastException。 参数:
    c - 用于对此 set 进行排序的比较器。null 值表示应该使用元素的自然顺序。
    嗯。谢谢。
      

  7.   

    返回-1表示什么,表示set中已存在该对象了是吗?那么再加入这个类的同一个对象只是覆盖了之前的对象吧?set不是有序不重复的么,你可以看下set的长度有没有增加
      

  8.   

     返回-1表示前者小于后者,也就是说set中可以添加该元素,并不会被覆盖。我之前的理解就是TreeSet只需要用CompareTo方法比较就可以了。因为看到网上有些使用equals方法比较的所以比较疑问。主要是因为Set是根据equals来比较大小的,而TreeSet和Set可能有点出入。
      

  9.   

    TreeSet只能添加实现了Comparable接口的对象。
    重写compareTo方法,总返回0,那么同一个对象只能添加1个。
      

  10.   

    嗯。TreeSet只需要考虑compareTo方法就可以了。