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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 梦回唐朝 中级黑马   /  2013-8-23 22:51  /  1014 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 forward 于 2013-8-26 21:35 编辑

treeset 集合中,如何能保存两个名字相同的值??

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

4 个回复

倒序浏览
用ArrayList就行了嘛。
Treeset 底层是采用的二叉树结构,存储在TreeSet集合内的对象,是进行自然排序的,但是,要求对象必须具备比较性,在创建TreeSet对象的时候传递一个比较器,而比较器。是必须要实现Comparator接口。

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

回复 使用道具 举报
自己重写equals和hashcode方法。
回复 使用道具 举报
treeset是不能存放相同元素的,如果你非要存放相同的元素,有两种方法,一种你换个容器,用list集合,另一种就是你自己重写treeset中的compareTo或者compare方法,因为treeset就是通过compareTo和compare方法来保证元素的唯一性的,不是equals方法。

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

回复 使用道具 举报
是名字相同就可以了?
那定义个对象,有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>
复制代码
运行结果:

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马