TreeSet相关问题

TreeSet相关问题
1、TreeSet的底层是二叉树,按照树节点进行存储和取出,所以可以实现排序。
2、TreeSet基于 TreeMap 的 NavigableSet 实现,根据构造方法的不同,选择使用自然排序或者比较器排序。

排序:
自然排序:
采用无参构造,要求对象所属的类实现Comparable接口。
比较器排序:
TreeSet的带参构造,构造方法需要接收一个实现了Comparator接口的对象。

实现案例:

Student s1 = new Student("111","张三",21);
        Student s2 = new Student("222","曹曹",20);
        Student s3 = new Student("333","孙权",19);
        Student s4 = new Student("444","刘备",18);
        Student s5 = new Student("555","张飞",19);


        Set set = new java.util.TreeSet();

        set.add(s1);
        set.add(s2);
        set.add(s3);
        set.add(s4);
        set.add(s5);

//      构造迭代器显示结果
        Iterator iterator = set.iterator();
        while (iterator.hasNext()) {
            Student o = (Student) iterator.next();
            System.out.println(o.getName());

        }

Comparable接口 :
Comparable接口强行对实现它的类的每个实例进行自然排序,该接口的唯一方法compareTo方法被称为自然比较方法;强烈建议自然排序和equals一致(就是两个对象调用compareTo方法和调用equals方法返回的布尔值应该一样)
Comparator接口:
Comparator接口强行对某个对象 collection 进行整体排序 的比较函数。可以将 Comparator 传递给 sort 方法

Comparable接口实现案例:

class Dog implements Comparable{
       public int age;
       public String name;
       public Dog(int age,String name){
       this.age=age;
       this.name=name;
  	   }

	@Override
	public String toString(){
       return "Dog [age="+age+",name="+name+"]";
	}
@Override
	public int compareTo(Object o) { 
		Dog d =(Dog)o;
		if(this.age>d.age) return 1;
		if(this.age<d.age) return -1;
		return 0;
	}
}
//以下是main方法的内容
		List list = new ArrayList();
		list.add(new Dog(6,"旺财"));
		list.add(new Dog(3,"啊黄"));
		list.add(new Dog(5,"伯爵"));

		for(int i=0;i<list.size();i++){
			System.out.println(list.get(i).toString());
		}
		Collections.sort(list);
		System.out.println("sort排序后");
		for(int i=0;i<list.size();i++){
			System.out.println(list.get(i).toString());

		}

Comparator接口实现案例:

public class ComparatorLength implements Comparator<String>{
 
    @Override
    public int compare(String o1, String o2) {
        int len1 = o1.length();
        int len2 = o2.length();
        return (len1 - len2 > 0) ? 1 : -1;
    }
}

//以下是main函数
String[] str = {"aadf","dqwd","dqwfcsqc","xqsccaac","csfwffqaf","czxca","cas","cacs","casc"};
        Comparator com1 = new ComparatorLength();
        Comparator com2 = new ComparatorLength();
        Arrays.sort(str, com1);
        System.out.println(Arrays.toString(str));
        Arrays.sort(str, com2);
        System.out.println(Arrays.toString(str));
        System.out.println((com1 == com2) +"--"+ (com1.equals(com2)));

谢谢大家!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

划水的阿瞒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值