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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 党传才 中级黑马   /  2012-4-17 18:54  /  2246 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.util.TreeSet;

class Drink implements Comparable {
        public String name;

        public int compareTo(Object o) {
                return 0;
        }
}
public class A{
        public static void main(String[] args) {
                Drink one = new Drink();
                Drink two = new Drink();
                one.name= "Coffee";
                two.name= "Tea";
                TreeSet set = new TreeSet();
                System.out.println(set.add(one));
                System.out.println(set.size());
                System.out.println(set.add(two));
                System.out.println(set.size());
                for(Object d:set.toArray()){
                        System.out.println(((Drink)d).name);
                }
        }
}

为什么第二次给set添加的时候失败
越详细越好

5 个回复

倒序浏览
因为你的Drink类中的compareto()方法始终返回0;也就是说调用compareto()方法的两个对象比较的结果始终是相同的 ,所以不能添加。
在compareto()方法体内我们应该定义比较的具体内容而不是直接返回一个值
回复 使用道具 举报
你的调用对象的compareTo方法返回的都是0。所以第二次的时候。Set认为你添加的是相同的值。
回复 使用道具 举报
  public int compareTo(Object o) {
                 return 0;

return 0,表示这对象和任何一个对象都是相同的,treeSet是带排序的,不能添加进两个相同的对象,因此添加失败!
回复 使用道具 举报
本帖最后由 了无尘 于 2012-4-17 20:26 编辑

你这个 compareTo方法始终返回0.即视为所有的对象都相等,所以你这个集合只能放一个对象。。。。
下边这个是我写的一个按照单词自然顺序排列的一个例子,
  1. import java.util.TreeSet;

  2. class Drink implements Comparable
  3. {
  4.        
  5.         public String        name;
  6.        
  7.         public Drink(String name)
  8.         {
  9.        
  10.                 this.name = name;
  11.         }
  12.        
  13.         // 根据英语单词的自然顺序做比较
  14.         public int compareTo(Object o)
  15.         {
  16.        
  17.                 char[] a = name.toCharArray(), b = ((Drink) o).name.toCharArray();
  18.                
  19.                 int index = 0;
  20.                
  21.                 while (a[index] == b[index])
  22.                 {
  23.                         if (index == a.length - 1 && index < b.length - 1)
  24.                         {
  25.                                 return -1;
  26.                         }
  27.                         else if (index == b.length - 1 && index < a.length - 1)
  28.                         {
  29.                                 return 1;
  30.                         }
  31.                         index++;
  32.                         if(index == a.length && index == b.length)
  33.                         {
  34.                                 return 0;
  35.                         }
  36.                 }
  37.                
  38.                 return a[index] - b[index];
  39.         }
  40.        
  41. }

  42. public class A
  43. {
  44.        
  45.         public static void main(String[] args)
  46.         {
  47.        
  48.                 TreeSet set = new TreeSet();
  49.                 System.out.println(set.add(new Drink("Coffee")));
  50.                 System.out.println(set.size());
  51.                 System.out.println(set.add(new Drink("Coffeea")));
  52.                 System.out.println(set.size());
  53.                 System.out.println(set.add(new Drink("Tea")));
  54.                 System.out.println(set.size());
  55.                 System.out.println(set.add(new Drink("Water")));
  56.                 System.out.println(set.size());
  57.                 System.out.println(set.add(new Drink("Cappuccino")));
  58.                 System.out.println(set.size());
  59.                 System.out.println(set.add(new Drink("Xo")));
  60.                 System.out.println(set.size());
  61.                 System.out.println(set.add(new Drink("Xo")));
  62.                 System.out.println(set.size());
  63.                 System.out.println(set.add(new Drink("Champagne")));
  64.                 System.out.println(set.size());
  65.                 for (Object d : set.toArray())
  66.                 {
  67.                         System.out.println(((Drink) d).name);
  68.                 }
  69.         }
  70. }
复制代码
回复 使用道具 举报
TreeSet集合中存放无序,不重复的元素,具有排序功能的集合.底层是二叉树数据结构。

所以在存入TreeSet集合中,元素首先实现comparable接口。

为了保证数据的唯一性在存放元素,程序会自动调用compareTo()方法,根据此方法返回的结果来判断重复元素,若果返回的结果为0则表示重复元素,不能存入TreeSet集合中。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马