17-集合框架-22-常用对象API(集合框架-TreeSet集合)

package cn.itcast.bean;

public class Person extends Object implements Comparable {

	private String name;
	private int 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;
	}

	public Person(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}

	@Override
	public int compareTo(Object o) {

		if (!(o instanceof Person))
			throw new ClassCastException("类型错误");
		Person p = (Person) o;

		/*
		 * 【如果直接return 0】 说明俩元素相等,由于TreeSet集合是Set集合的子类,所以要沿用Set集合特性——保证元素的唯一性,
		 * 所以如果后一个元素与前一个元素(已被存入集合)相等,则后一个元素不存。 这就是为什么return 0会导致主函数迭代器只输出第一个元素。
		 */
		// return this.name.compareTo(p.name);//为了防止两个不同的人但是年龄相同的情况,因为如果age一样,被视为俩对象相等,那么后者不会存入集合
		// 所以当age一样的时候,需要判断姓名,而name是String类型,有自己的compareTo方法(按照字典顺序排列),从而保证不漏掉每一个元素

		// 【简化以上代码】
		int temp = this.age - p.age;//这里好就好在age是整数,所以相减还是整数
		return temp==0?this.name.compareTo(p.name):temp;//如果俩人年龄相等,temp==0,那么比较姓名,否则返回temp
	}

}

================================================================分割线===============================================================

package cn.itcast.treeset.demo;

import java.util.Iterator;
import java.util.TreeSet;

import cn.itcast.bean.Person;

public class TreeSetDemo {

	public static void main(String[] args) {

/*
 * 【需求】以Person对象的年龄进行从小到大的排序
 * (因为TreeSet集合的功能就是排序,且Person类中复写compareTo方法,那么用age作为比较依据)
 */
		TreeSet ts = new TreeSet();
		ts.add(new Person("zhangsan", 28));
		ts.add(new Person("wangwu", 29));
		ts.add(new Person("lisi", 21));
		ts.add(new Person("zhouqi", 29));
		ts.add(new Person("zhaoliu", 25));

		Iterator it = ts.iterator();
		while (it.hasNext()) {
			Person p = (Person) it.next();
			System.out.println(p.getName() + ":" + p.getAge());
		}
	}

}


你可能感兴趣的:(17-集合框架-22-常用对象API(集合框架-TreeSet集合))