黑马程序员技术交流社区
标题:
求解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,则存不进去,除非还有其他比较属性。
代码:
<P>import java.util.*;</P>
<P>
class person implements Comparable
{
private String name;
private int age;</P>
<P> public person(String name,int age)
{
this.name = name;
this.age = age;
}</P>
<P> public String getName()
{
return name;
}</P>
<P> public int getAge()
{
return age;
}</P>
<P> public int compareTo(Object obj)
{
person p = (person)obj;</P>
<P> if(this.age == p.age)
return this.name.compareTo(p.name);
else if(this.age<p.age)
return -1;
return 1;</P>
<P> }</P>
<P>}</P>
<P>class TreeSetDemo
{
public static void main(String[] args)
{
TreeSet ts = new TreeSet();</P>
<P> ts.add(new person("zs",20));
ts.add(new person("zs",18));</P>
<P> Iterator it = ts.iterator();</P>
<P> while(it.hasNext())
{
person p = (person)it.next();
System.out.println(p.getName()+"......"+p.getAge());
}
}
}
</P>
<P> </P>
复制代码
运行结果:
test.jpg
(32.74 KB, 下载次数: 9)
下载附件
2013-8-24 08:16 上传
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2