java set唯一吗_《java入门第一季》之TreeSet存储自定义对象并保证排序和唯一

上一篇用一个简单的例子,介绍了treeset集合存储的内部过程,这里再完善其存储自定义对象保证唯一。

需求:A:

* 自然排序,按照年龄从小到大排序

*         B:

* 成员变量值都相同即为同一个元素

自定义学生类给了出来:

public class Student implements Comparable {

private String name;

private int age;

public Student() {

super();

}

public Student(String name, int age) {

super();

this.name = name;

this.age = age;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

@Override

public int compareTo(Student s) {

//return 0;//返回0认为除了第一个根节点外,都是重复元素。相等不搭理,因为为0,认为都不搭理

// return 1;//怎么进去怎么出来。大于零右排,1大于零全部右排

// return -1;//怎么进去怎么倒着出来。小于零左排,-1小于零全部左排了

//从上面看出。s是第一个,为根节点

// 这里返回什么,其实应该根据我们的排序规则来做

// 按照年龄排序,主要条件

int num = this.age - s.age;

// 次要条件

// 年龄相同的时候,还得去看姓名是否也相同

// 如果年龄和姓名都相同,才是同一个元素

int num2 = (num == 0 ? this.name.compareTo(s.name) : num);//二级比较比较年龄

return num2;

}

}测试类给了出来:

public class TreeSetDemo2 {

public static void main(String[] args) {

// 创建集合对象

TreeSet ts = new TreeSet();

// 创建元素

Student s1 = new Student("linqingxia", 27);

Student s2 = new Student("zhangguorong", 29);

Student s3 = new Student("wanglihong", 23);

Student s4 = new Student("linqingxia", 27);

Student s5 = new Student("liushishi", 22);

Student s6 = new Student("wuqilong", 40);

Student s7 = new Student("fengqingy", 22);

// 添加元素

ts.add(s1);

ts.add(s2);

ts.add(s3);

ts.add(s4);

ts.add(s5);

ts.add(s6);

ts.add(s7);

// 遍历

for (Student s : ts) {

System.out.println(s.getName() + "---" + s.getAge());

}

}

}

打印结果:

fengqingy---22

liushishi---22

wanglihong---23

linqingxia---27

zhangguorong---29

wuqilong---40

存储自定义对象其实就是多了比较规则而已,本质上不变的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值