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