黑马程序员技术交流社区

标题: 求解java中treeset 集合问题 [打印本页]

作者: 梦回唐朝    时间: 2013-8-23 22:51
标题: 求解java中treeset 集合问题
本帖最后由 forward 于 2013-8-26 21:35 编辑

treeset 集合中,如何能保存两个名字相同的值??
作者: 乖睡觉咯    时间: 2013-8-23 22:59
用ArrayList就行了嘛。
Treeset 底层是采用的二叉树结构,存储在TreeSet集合内的对象,是进行自然排序的,但是,要求对象必须具备比较性,在创建TreeSet对象的时候传递一个比较器,而比较器。是必须要实现Comparator接口。
作者: 王靖远    时间: 2013-8-23 23:00
自己重写equals和hashcode方法。
作者: meng    时间: 2013-8-24 00:59
treeset是不能存放相同元素的,如果你非要存放相同的元素,有两种方法,一种你换个容器,用list集合,另一种就是你自己重写treeset中的compareTo或者compare方法,因为treeset就是通过compareTo和compare方法来保证元素的唯一性的,不是equals方法。
作者: 耶稣说wō乖    时间: 2013-8-24 08:17
是名字相同就可以了?
那定义个对象,有2个属性就可以了,
如person类有2个属性名字和年龄。
TreeSet ts = new TreeSet();
  person p1 = new person("dz",18);
  person p2 = new person("dz",19);

  ts.add(p1);
  ts.add(p2);

首先明确点,相比hashSet是通过hashcode()以及equals()方法来保证元素的唯一性,treeSet实现了compareble接口,他是通过compareTo()方法来保证元素的唯一性的,如果我们不重写compareTo方法以及不定义比较器的话,他会按照默认的compareTo方法来比较存入元素,按字母和数字的大小顺序,从小到大排列,若相同则不存入(compareTo方法会返回int类型的数,正数表示大于,负数表示小于,0表示相同)。
所以你想定义名字相同的话若只有一个数据他就会返回0,则存不进去,除非还有其他比较属性。
代码:

  1. <P>import java.util.*;</P>
  2. <P>
  3. class person implements Comparable
  4. {
  5.        private String name;
  6.        private int age;</P>
  7. <P>       public person(String name,int age)
  8.        {
  9.         this.name = name;
  10.         this.age = age;
  11.        }</P>
  12. <P>       public String getName()
  13.        {
  14.         return name;
  15.        }</P>
  16. <P>       public int getAge()
  17.        {
  18.         return age;
  19.        }</P>
  20. <P>       public int compareTo(Object obj)
  21.        {
  22.         person p = (person)obj;</P>
  23. <P>        if(this.age == p.age)
  24.          return this.name.compareTo(p.name);
  25.         else if(this.age<p.age)
  26.          return -1;
  27.         return 1;</P>
  28. <P>       }</P>
  29. <P>}</P>
  30. <P>class TreeSetDemo
  31. {
  32.        public static void main(String[] args)
  33.        {
  34.              TreeSet ts = new TreeSet();</P>
  35. <P>             ts.add(new person("zs",20));
  36.              ts.add(new person("zs",18));</P>
  37. <P>             Iterator it = ts.iterator();</P>
  38. <P>             while(it.hasNext())
  39.              {
  40.               person p = (person)it.next();
  41.               System.out.println(p.getName()+"......"+p.getAge());
  42.              }
  43.        }
  44. }
  45. </P>
  46. <P> </P>
复制代码
运行结果:






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2